K8S基础和安装

一 、Kubernetes 概述

k8s用于自动部署、扩展和管理"容器化(containerized)应用程序"的开源系统,可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如 Docker)的集群,是一个生态极其丰富的容器编排框架工具。

二、K8S特性

1.弹性伸缩

使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,

保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。

2.自我修复

在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;

杀死健康检査失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。

3.服务发现和负载均衡

K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,

使得用户无需考虑容器IP问题。

4.自动发布(默认滚动发布模式)和回滚

K8S采用滚动更新策略更新应用,一次更新一个或者部分Pod,而不是同时删除所有Pod,

如果更新过程中出现问题,将回滚更改,确保升级不影响业务。

5.集中化配置管理和密钥管理

管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。

并可以将一些常用的配置存储在K8S中,方便应用程序使用。

6.存储编排,支持外挂存储并对外挂存储资源进行编排

挂载外部存储系统,无论是来自本地存储,公有云(如AWS),

还是网络存储(如NFS、Glusterfs、Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。

7.任务批处理运行

提供一次性任务,定时任务;满足批量数据处理和分析的场景。

三、Kubernetes 核心概念

Kubernetes 包含多种类型的资源对象:Pod、Label、Service、Replication 、Ingress、Controller 等。

1.pod

Pod是K8s能够创建和管理的最小单位,一个Pod里可以包含一个或者多个容器应用,Pod里的容器之间共享网络、存储等资源。

一个 Pod 里可以运行多个容器,又叫边车模式(SideCar)。

而在生产环境中一般都是单个容器或者具有强关联互补的多个容器组成一个 Pod。

同一个 Pod 之间的容器可以通过 localhost 互相访问,并且可以挂载 Pod 内所有的数据卷;

但是不同的 Pod 之间的容器不能用 localhost 访问,也不能挂载其他 Pod 的数据卷。

2.Service

在K8S集群内部,为通过标签选择器相关联的一组Pod提供一个统一的访问入口(clusterIP),只支持四层代理转发。

虚拟IP只在集群内部有效。

3.Ingress

作为K8S集群外部接入层,可自定义ingress规则根据用户请求的域名或URL请求路径转发给指定的service,支持七层代理转发。

bash 复制代码
#举个例子
客户端请求 http://www.xxx.com:port  ---> Ingress ---> Service ---> Pod

四、正式安装K8S-kubeadm方式

一、安装之前准备工作

安装基本软件,关闭防火墙,关闭swap

bash 复制代码
apt install chrony ipvsadm tree ipset -y
systemctl stop ufw
swapoff -a 
sed -i '/swap.img/s/^/#/' /etc/fstab

1.hostname修改

bash 复制代码
hostnamectl set-hostname 新主机名
hostname #查看域名

2.安装容器引擎containerd

bash 复制代码
	apt update
	apt install containerd[=版本号] -y
	#/lib/systemd/system/containerd.service (二进制安装参考此配置)
	mkdir /etc/containerd/  ## 存放containerd的配置文件
	#配置containerd
	containerd config default > /etc/containerd/config.toml
	
	修改pause镜像地址:
		sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"  
		#阿里镜像地址
		sandbox_image = "harbor.hiuiu.com/kubernetes/google_containers/pause:3.9" 
		#本地harbor镜像地址
		
	修改镜像加速配置
		168       [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
		169      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
		170      endpoint = ["https://hzsbbqty.mirror.aliyuncs.com"]
	修改为true
		137             SystemdCgroup =  true

3.安装crictl工具

下载crictl安装包:

bash 复制代码
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.26.1/crictl-v1.26.1-linux-amd64.tar.gz
bash 复制代码
mkdir /usr/local/bin/crictl
	tar xvf crictl-v1.29.0-linux-amd64.tar.gz -C /usr/local/bin/crictl
	vim /etc/profile
	export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/bin/crictl
	source /etc/profile
	crictl -v
	
	#配置crictl
	cat > /etc/crictl.yaml <<EOF
	runtime-endpoint: "unix:///run/containerd/containerd.sock"
	image-endpoint: "unix:///run/containerd/containerd.sock"
	timeout: 10
	debug: false
	EOF

4.安装nerdctl工具

下载nerdctl安装包

bash 复制代码
wget https://github.com/containerd/nerdctl/releases/download/v1.3.0/nerdctl-1.3.0-linux-amd64.tar.gz
bash 复制代码
tar xvf nerdctl-1.7.6-linux-amd64.tar.gz -C /usr/local/bin/
	nerdctl version
	mkdir /etc/nerdctl
	cat > /etc/nerdctl/nerdctl.toml <<EOF
	namespace = "k8s.io"
	debug = false
	debug_full = false
	insecure_registry = true
	EOF

5.安装CNI工具

CNI的作用是为容器提供网桥,如果不安装CNI,容器只有host网络模式。

安装CNI:

bash 复制代码
wget https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz
		tar xvf cni-plugins-linux-amd64-v1.5.1.tgz -C /opt/cni/bin/

6.测试

bash 复制代码
nerdctl run -it -p 8000:80 --rm  --name=nginx_test harbor.hiuiu.com/basic_image/centos7_filebeat_nginx:2408.u -- bash

nginx #在容器里启动nginx

7.配置时间服务器

bash 复制代码
sed -i 's/pool ntp.ubuntu.com/pool 时间服务器地址/' /etc/chrony/chrony.conf
systemctl restart chronyd

8.加载模块

bash 复制代码
modprobe br_netfilter && lsmod |grep br_netfilter
		modprobe ip_conntrack && lsmod | grep conntrack
		cat >/etc/modules-load.d/modules.conf<<EOF
		ip_vs
		ip_vs_lc
		ip_vs_lblc
		ip_vs_lblcr
		ip_vs_rr
		ip_vs_wrr
		ip_vs_sh
		ip_vs_dh
		ip_vs_fo
		ip_vs_nq
		ip_vs_sed
		ip_vs_ftp
		ip_vs_sh
		ip_tables
		ip_set
		ipt_set
		ipt_rpfilter
		ipt_REJECT
		ipip
		xt_set
		br_netfilter
		nf_conntrack
		overlay
		EOF
		systemctl restart systemd-modules-load.service
		lsmod | grep -e ip_vs -e nf_conntrack

9.修改内核参数

bash 复制代码
vim  /etc/sysctl.conf
net.ipv4.ip_forward=1
vm.max_map_count=262144
kernel.pid_max=4194303
fs.file-max=1000000
net.ipv4.tcp_max_tw_buckets=6000
net.netfilter.nf_conntrack_max=2097152
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
		
sysctl -p

10.修改machin-id

bash 复制代码
cat /etc/machine-id
rm -f /etc/machine-id
systemd-machine-id-setup

二、正式安装K8S-kubeadm方式

1.安装 kubeadm 、kubelet、 kubectl

bash 复制代码
## ----- 线上安装方式
	apt update
	apt install apt-transport-https ca-certificates curl gpg
	mkdir -p -m 755 /etc/apt/keyrings
	curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg   
	## 阿里源
	echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/ /" |  tee /etc/apt/sources.list.d/kubernetes.list
	## 安装命令
	apt-get update && apt-cache madison kubeadm
	apt-get install -y kubelet=1.30.3-1.1 kubeadm=1.30.3-1.1 kubectl=1.30.3-1.1
	## ----- 线上安装方式

	##线下本地安装:
	apt-get update
	apt-get upgrade
	apt-get install socat ebtables conntrack -y
	dpkg -i kubernetes-cni_1.4.0-1.1_amd64.deb
	dpkg -i cri-tools_1.30.1-1.1_amd64.deb
	dpkg -i kubeadm_1.30.3-1.1_amd64.deb 
	dpkg -i kubectl_1.30.3-1.1_amd64.deb 
	dpkg -i kubelet_1.30.3-1.1_amd64.deb 

2.拉取镜像

bash 复制代码
vim imagesFromlocal.sh

nerdctl pull harbor.hiuiu.com/kubeadm_v1.30.3/kube-apiserver:v1.30.3
nerdctl pull harbor.hiuiu.com/kubeadm_v1.30.3/kube-controller-manager:v1.30.3
nerdctl pull harbor.hiuiu.com/kubeadm_v1.30.3/kube-proxy:v1.30.3
nerdctl pull harbor.hiuiu.com/kubeadm_v1.30.3/kube-scheduler:v1.30.3
nerdctl pull harbor.hiuiu.com/kubeadm_v1.30.3/pause:3.9
nerdctl pull harbor.hiuiu.com/kubernetes/etcd:3.5.12-0
nerdctl pull harbor.hiuiu.com/kubernetes/coredns:v1.11.1

bash imagesFromlocal.sh

3.创建MASTER

bash 复制代码
kubeadm init --apiserver-advertise-address=172.16.205.10 --apiserver-bind-port=6443 --kubernetes-version=v1.30.3 --pod-network-cidr=10.200.0.0/16 --service-cidr=10.96.0.0/16 --service-dns-domain=cluster.local --image-repository=harbor.hiuiu.com/kubeadm_v1.30.3 --ignore-preflight-errors=swap

按照提示执行:
	mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
 	export KUBECONFIG=/etc/kubernetes/admin.conf

查看集群节点

bash 复制代码
kubectl get nodes

重新生成 Kubernetes 集群节点加入命令的命令

bash 复制代码
kubeadm token create --print-join-command

4.node节点加入集群

bash 复制代码
kubeadm join 172.16.205.10:6443 --token tjg2ya.qxghlqugffx33rg6 \
        --discovery-token-ca-cert-hash sha256:d763b517f993d0992d168db4a2650cb2fd2cca48900b99334241be86ecb825e4

清除 kubeadm 相关的配置和数据

bash 复制代码
kubeadm reset
sudo rm -rf /etc/kubernetes
相关推荐
皮锤打乌龟5 小时前
(干货)Jenkins使用kubernetes插件连接k8s的认证方式
运维·kubernetes·jenkins
南猿北者5 小时前
docker Network(网络)
网络·docker·容器
ggaofeng9 小时前
通过命令学习k8s
云原生·容器·kubernetes
death bell9 小时前
Docker基础概念
运维·docker·容器
想学习java初学者11 小时前
Docker Compose部署Kafka(非Zookeeper)
docker·容器·kafka
qq_道可道12 小时前
K8S升级到1.24后,切换运行时导致 dind 构建镜像慢根因定位与解决
云原生·容器·kubernetes
SONGW201812 小时前
k8s拓扑域 :topologyKey
kubernetes
weixin_4381973813 小时前
K8S实现反向代理,负载均衡
linux·运维·服务器·nginx·kubernetes
郝同学的测开笔记14 小时前
云原生探索系列(十二):Go 语言接口详解
后端·云原生·go
mit6.82415 小时前
[Docker#5] 镜像仓库 | 命令 | 实验:搭建Nginx | 创建私有仓库
linux·后端·docker·云原生