K8S-部署V1.28

发布时间 2023-12-26 10:15:55作者: 狂自私

准备工作

虚拟机配置

  1. 硬件配置:内存2GB或2G+,CPU 2核或CPU 2核+;
  2. 集群内各个机器之间能相互通信;
  3. 集群内各个机器可以访问外网,需要拉取镜像 → 能下载镜像就行,或者提前下载好即可。
  4. 禁止swap分区;

软件环境配置

1、关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

 

2、关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久

setenforce 0  #临时

 

3、关闭swap(k8s禁止虚拟内存以提高性能)

sed -ri 's/.*swap.*/#&/' /etc/fstab #永久

swapoff -a #临时

 

4、添加hosts

cat >> /etc/hosts << EOF

192.168.172.134 k8smaster   #请根据自己的实际地址做修改
192.168.172.135 k8snode      #请根据自己的实际地址做修改

EOF

#上面是一条将文本输入到/etc/hosts的命令,EOF是本次指定的输入结束标记符号。

 

5、设置网桥参数

cat > /etc/sysctl.d/k8s.conf << EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

sysctl --system  #生效

 

6、时间同步

yum install ntpdate -y
ntpdate time.windows.com
若是使用的centos8,那么需要使用chrony
yum install -y chrony
修改配置文件添加时钟源
[root@CentOs8-K8S-master 20231226]# sed -n '3P' /etc/chrony.conf
server time.windows.com iburst
[root@CentOs8-K8S-master 20231226]#

7、安装docker

更新docker的yum源

yum install wget -y
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

安装最新版本的docker:

yum install docker-ce -y

 

配置加速器加速下载 

/etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com","https://gg3gwnry.mirror.aliyuncs.com"]
}

然后执行:

systemctl enable docker.service

 

8、启用容器运行时

#如果安装的是1.24版本以上的K8S,那需要修改容器运行时(CRI)的配置文件,将CRI启用:

containerd config default > /etc/containerd/config.toml
#修改配置文件中的sandbox image取值为3.9
[root@CentOs8-K8S-master gyj]# sed -n '61p' /etc/containerd/config.toml
    sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
[root@CentOs8-K8S-master gyj]# sudo systemctl restart containerd

参考官方说明:

https://v1-28.docs.kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

https://v1-28.docs.kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/#containerd

 部署K8s

1、添加k8s的阿里云YUM源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2、安装 kubeadm,kubelet 和 kubectl

yum install kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2 -y

然后执行:

systemctl enable kubelet.service

3、查看有没有安装:

yum list installed | grep kubelet
yum list installed | grep kubeadm
yum list installed | grep kubectl

查看安装的版本: kubelet --version

Kubelet:运行在cluster所有节点上,负责启动POD和容器;

Kubeadm:用于初始化cluster的一个工具;

Kubectl:kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件;

4、重启虚拟机,包括即将作为master或者node的

5、部署Kubernetes Master主节点

此命令在master机器上执行;

kubeadm init \
--apiserver-advertise-address=192.168.172.134 \    #该地址为master主机地址
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.28.2 \
--service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 #这个可以保持不变,除非你有特别的需要

 说明:

--apiserver-advertise-address:master主机地址,跟其他pod互通的那个;

--image-repository:镜像仓库地址;

--pod-network-cidr:和--service-cidr类似,不能跟主机网络相同或冲突,也不能和--service-cidr一样;

--service-cidr 的选取不能和PodCIDR及本机网络有重叠或者冲突,一般可以选择一个本机网络和PodCIDR都没有用到的私网地址段,比如PODCIDR使用10.244.0.0/16, 那么service cidr可以选择10.96.0.0/12,网络无重叠冲突即可;

5.1、报错:detected that the sandbox image "registry.k8s.io/pause:3.6" of the container runtime is inconsistent with that used by kubeadm.  It is recommended that using "registry.aliyuncs.com/google_containers/pause:3.9" as the CRI sandbox image.

解决:软件环境配置的第8条没有做好,请重做。

5.2、报错端口被占用:

使用kubeadmin reset命令重置,然后继续执行初始化即可。

6、为用户赋予权限

#上面的kubeadm init命令输出中说用普通用户来执行以下3条命令的,但是经过测试,任何用户想要执行kubectl命令,都需要执行下面的这三条命令才行。不然会被拒绝

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

然后再执行命令便不会被拒绝:

kubectl get nodes

7、node主机加入

接下来把node节点加入Kubernetes master中,Node机器上执行

向集群添加新节点,执行的命令就是kubeadm init最后输出的kubeadm join命令:

#根据kubeadm init实际输出结果来执行,以下只是示例
kubeadm join 192.168.172.132:6443 --token wa5bif.zfuvbesevdfvf4of \
    --discovery-token-ca-cert-hash sha256:87cf5828d54dd80da13c4b57c57360370ea0267a7cc3991989ca3006cf3e44d8

注意,极为不建议使用虚拟机的复制功能来创建虚拟机,这样可能会因为主机名、UUID等各种重复导致node不能加入master中。

8、部署网络插件

这个可以根据自己的需要选择,各项网络插件的说明参考官方文档:https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/addons/

我选择的是flannel,在master主机上运行命令部署;

wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

#若是你自定义了pod-network-cidr,那么需要修改kube-flannel.yml中相应的内容,详情请参考:

https://github.com/flannel-io/flannel#deploying-flannel-manually

#sed -i 's:10.244.0.0/16:192.168.52.0/24:' ./kube-flannel.yml

#【10.244.0.0/16】是默认的pod所在的cidr,由于自定义了pod的cidr,所以这里要修改下

应用kube-flannel.yml文件得到运行时容器,在master机器上执行

kubectl apply -f kube-flannel.yml

然后查看节点状态: kubectl get nodes (在master机器上执行),下图只是示例

 

说明还没有就绪,需要等一会儿,然后节点就就绪了;

 至此我们的k8s环境就搭建好了;