最近用k8s搭建自己的云工作环境,便在腾讯云购买两台服务器来部署,以下是k8s集群部署过程,欢迎大家参考。
环境说明
云服务器:腾讯云
操作系统:centos 7.8
kubeadm k8s 版本:v1.22.4
docker版本: 20.10.11
云服务器:172.17.0.17 hjforever-master (单节点) 172.17.0.15 hjforever-node1 (工作节点)
系统环境准备
每个节点的环境准备都需要执行
修改云服务器节点的host及hostname
1 2 3 4 5
| hostnamectl set-hostname hjforever-master hostnamectl set-hostname hjforever-node1 vi /etc/hosts 172.17.0.15 hjforever-node1 172.17.0.17 hjforever-master
|
关闭防火墙 firewalld 和 selinux
1 2 3 4
| systemctl stop firewalld systemctl disable firewalld sed -i 's/enforcing/disabled/' /etc/selinux/config setenforce 0
|
云服务器内网端口访问也会被安全组限制,在腾讯安全组中需要加上子网中端口访问权限具体配置规则如下。
.png)
关闭swap
1 2
| swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab
|
系统参数配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| cat > /etc/sysctl.d/k8s_better.conf << EOF net.ipv4.ip_forward=1 net.ipv4.tcp_tw_recycle=0 vm.swappiness=0 vm.overcommit_memory=1 vm.panic_on_oom=0 fs.inotify.max_user_instances=8192 fs.inotify.max_user_watches=1048576 fs.file-max=52706963 fs.nr_open=52706963 net.ipv6.conf.all.disable_ipv6=1 EOF sysctl -p /etc/sysctl.d/k8s_better.conf sysctl -w net.bridge.bridge-nf-call-iptables=1
|
确保每一台集齐uuid不一致
1
| cat /sys/class/dmi/id/product_uuid
|
安装基础组件
1 2 3
| yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
|
安装docker及k8s
每个节点的环境准备都需要执行
设置阿里云 docker yum 源镜像
1 2
| yum-config-manager --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
|
安装docker
安装
1 2
| yum list docker-ce --showduplicates | sort -r yum install -y docker-ce docker-ce-cli containerd.io
|
vim /etc/docker/daemon.json 添加docker配置文件,当文件不存在则自己添加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| vim /etc/docker/daemon.json { "exec-opts": [ "native.cgroupdriver=systemd" ], "log-driver": "json-file", "log-level": "warn", "log-opts": { "max-size": "1000m", "max-file": "3" }, "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn" ], "insecure-registries": [], "selinux-enabled": false }
|
启动docker
1 2
| systemctl enable docker systemctl start docker
|
验证docker
1 2
| docker run hello-world docker version
|

设置阿里云 k8s yum源镜像
1 2 3 4 5 6 7 8 9
| cat << EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
|
安装kubeadm,kubelet和kubectl
1 2
| yum install -y kubectl-1.22.4 kubelet-1.22.4 kubeadm-1.22.4 systemctl enable kubelet
|
初始化部署Master节点及工作节点
初始化master节点 (master节点上执行此处为172.17.0.17 )
1 2 3 4 5 6 7
| kubeadm init \ --apiserver-advertise-address=172.17.0.17 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.22.4 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --ignore-preflight-errors=all
|
–apiserver-advertise-address 集群通告地址(master集群地址,此处为单master节点)
–image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
–kubernetes-version K8s版本,与上面安装的一致
–service-cidr 集群内部虚拟网络,Pod统一访问入口
–pod-network-cidr Pod网络,,与下面部署的CNI网络组件yaml中保持一致
–ignore-preflight-errors=all 忽略一些检查错误
初始化后根据提示执行以下命令,后续kubectl默认控制集群时,需要使用到CA密钥,通过TLS协议保障通讯的安全性。我们要通过下面3行命令拷贝密钥信息,这样,kubectl执行时会首先访问当前用户的.kube目录,使用这些授权信息访问集群。
1 2 3 4
| 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
|
之后添加worker节点时,要通过token才能保障安全性,此处先手动保存此命令
1
| kubeadm join 172.17.0.17:6443 --token lgcp23.pxw8hzdi0n0nmwfk --discovery-token-ca-cert-hash sha256:2bd3c21974df4a996e532c97a96146b7e420e7043236db452a6ceedf40768f0b
|
部署flannel网络
flannel网络需要指定IP地址段,在上一步中已经通过编排文件设置为10.244.0.0/16
。部署flannel只需要一行命令:
1
| kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
|
此时,调用get pods命令,可以看到master节点的组件和flannel网络都牌Running状态:

部署工作节点 (此处为172.17.0.15)
在工作节点上执行之前保存的的kubeadm join命令,建议加上 --v=5来看下前置校验,如果不通过可以根据提示处理
1
| kubeadm join 172.17.0.17:6443 --token lgcp23.pxw8hzdi0n0nmwfk --discovery-token-ca-cert-hash sha256:2bd3c21974df4a996e532c97a96146b7e420e7043236db452a6ceedf40768f0b
|
在master节点通过kubectl get nodes命令可以看到集群中已有2个节点:
.png)
处理 kubectl get cs 报错
执行 kubectl get cs 如果出现Get “https://127.0.0.1:10257/healthz”: dial tcp 127.0.0.1:10257: connect: connection refused 报错,则执行以下操作 , 打开以下两个配置文件分别 注释 - --port=0这一行,参考下图
1 2
| vim /etc/kubernetes/manifests/kube-controller-manager.yaml vim /etc/kubernetes/manifests/kube-scheduler.yaml
|
.png)
修改之后保存即可,配置修改后组件会检测自动重启。再次执行 kubectl get cs 不报错即可。