一、前言
本文介绍了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
# 创建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的优劣对比如下: