本文介绍了CentOS 7.6 64bit上使用脚本部署单master kubernetes,CentOS 7 将在2024年停止支持,本文仅供参考学习,勿用于生产环境。
测试使用华为云ECS,规划如下:
ECS名称 规格 IP OS
ecs-k8s-master 4vCPUs | 8GiB 192.168.1.100 CentOS 7.6 64bit
ecs-k8s-node1 2vCPUs | 16GiB 192.168.1.101 CentOS 7.6 64bit
ecs-k8s-node2 2vCPUs | 16GiB 192.168.1.102 CentOS 7.6 64bit
OS:CentOS 7.6 64bit
Docker:v18.06.1
K8S组件:v1.18.6

- #!/bin/bash
-
- #################################################################################
- # 作者:cxy-2022-10-20
- # 功能:搭建K8S运行环境
- #
- #################################################################################
-
-
- echo "1、基础环境配置..."
- ##查版本
- lsb_release -a
-
- # 关闭防火墙
- systemctl disable firewalld
- systemctl stop firewalld
-
- # 临时/永久关闭selinux
- setenforce 0
- sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
- sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
-
- # 临时/永久关闭swap
- swapoff -a
- sed -ri 's/.*swap.*/#&/' /etc/fstab
-
- # 将桥接的IPv4流量传递到iptables的链
- cat > /etc/sysctl.d/k8s.conf << EOF
- net.bridge.bridge-nf-call-ip6tables = 1
- net.bridge.bridge-nf-call-iptables = 1
- EOF
-
- # 指定生效
- sysctl --system
-
- # 在master添加hosts 根据实际自行修改
- cat >> /etc/hosts << EOF
- 192.168.1.100 ecs-k8s-master
- 192.168.1.101 ecs-k8s-node1
- 192.168.1.102 ecs-k8s-node2
- EOF
- #注意:这里要看一下/etc/hosts,把没用的都注释掉
-
-
- echo "2、安装Docker(v18.06.1)..."
-
- # 查找想要安装的版本
- # yum list docker-ce.x86_64 --showduplicates | sort -r
-
- # 华为云镜像源
- wget https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo
-
- # yum安装
- yum -y install docker-ce-18.06.1.ce-3.el7
-
- # 启动、开机自启动
- systemctl enable docker && systemctl start docker
-
-
- #查看Docker版本
- docker -v
-
-
- #修改Docker驱动方式
- cat > /etc/docker/daemon.json << EOF
- {
- "exec-opts": ["native.cgroupdriver=systemd"]
- }
- EOF
-
- #重启Docker
- systemctl daemon-reload
- systemctl restart docker
-
-
- echo "3、安装K8S组件(v1.23.9)"
-
- #使得 apt 支持 ssl 传输
- yum install -y apt-transport-https
-
- #添加yum源--华为
- cat <<EOF > /etc/yum.repos.d/kubernetes.repo
- [kubernetes]
- name=Kubernetes
- baseurl=https://mirrors.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
- enabled=1
- gpgcheck=1
- repo_gpgcheck=1
- gpgkey=http://mirrors.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg
- http://mirrors.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg
- EOF
-
- # 下载 kubectl,kubeadm以及 kubelet (node节点好像不需要安装kubectl)
- yum install -y kubectl-1.18.6 kubelet-1.18.6 kubeadm-1.18.6
-
- #启动并添加自启动
- systemctl enable kubelet && systemctl start kubelet
-
-
上方脚本,在所有ECS(1master、2node)上均要执行。
- #master初始化(master服务器上执行)
- kubeadm init \
- --apiserver-advertise-address=192.168.1.100 \
- --image-repository registry.aliyuncs.com/google_containers \
- --pod-network-cidr=10.244.0.0/16 \
- --ignore-preflight-errors='all'
-
- #安装成功后,会有提示,执行相关命令(master服务器上执行)
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
- #创建不过期的token(master服务器上执行)
- kubeadm token create --print-join-command --ttl=0
-
- #执行后,会出现一段kubeadm join命令(在各node节点上执行)
- kubeadm join 192.168.1.100:6443 --token 1quug2.vpr4iaooy6bd61aj --discovery-token-ca-cert-hash sha256:0d07dd62fca5d34e31b558247789b2623ceeebd42bb4440b53a4025d290c58fd
- #注意上方命令仅是示例,要执行的是kubeadm token create后服务器打印的命令!
-
- #部署flannel网络(master服务器执行)
- kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
-

安装成功提示,及后续需要执行的命令。

node节点加入成功。
执行红框中的命令。
- kubectl get pod --all-namespaces
-
- kubectl get node

- # 创建nginx deployment
- $ kubectl create deployment nginx --image=nginx
- # 发布服务
- $ kubectl expose deployment nginx --port=80 --type=NodePort
- # 伸缩
- $ kubectl scale -n default deployment nginx --replicas=2
-
- #查看pod和服务
- $ kubectl get pods,svc
-
- #验证后清理
- #删除服务
- $ kubectl delete svc nginx
- # 删除 deployment
- $ kubectl delete deployment nginx
验证效果如下:

访问:http://任意node节点EIP:端口号。
(端口号:就是上图红圈的位置,也就是NodePort的端口号)
至此,在Ubuntu上部署K8S就完成了,但是在这个过程可能会碰到各种问题,最容易碰到的问题就是网络问题,虽然K8S相关镜像源已经更换到了华为云镜像源,但是在部署flannel的时候,很有可能等待较长时间才能成功拉取镜像完成部署。以及后期会碰到kubeadm join token过期等问题。单master也不适合用在生产环境,UI界面和监控后期还要自己配置维护,较为麻烦。而我们期望的是部署维护的过程要简单,工作重点应当是工作负载的构建上。
在这里向大家推荐华为云CCE,它与自建K8S的优劣对比如下:

本次测试相关云资源由天津市淘客科技有限公司提供