一、前言

本文介绍了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

centos安装单机版k8s centos部署k8s_centos

 

三、环境配置及组件安装(脚本)

#!/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)上均要执行。

centos安装单机版k8s centos部署k8s_centos_02

 

 

后续操作

#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

centos安装单机版k8s centos部署k8s_centos_03

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

centos安装单机版k8s centos部署k8s_centos_04

node节点加入成功。

centos安装单机版k8s centos部署k8s_kubernetes_05

执行红框中的命令。 

 

验证部署结果

kubectl get pod --all-namespaces
 
kubectl get node

centos安装单机版k8s centos部署k8s_centos安装单机版k8s_06

 

四、部署一个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

验证效果如下:

centos安装单机版k8s centos部署k8s_centos安装单机版k8s_07

 访问:http://任意node节点EIP:端口号。

(端口号:就是上图红圈的位置,也就是NodePort的端口号)

结束语 :

至此,在Ubuntu上部署K8S就完成了,但是在这个过程可能会碰到各种问题,最容易碰到的问题就是网络问题,虽然K8S相关镜像源已经更换到了华为云镜像源,但是在部署flannel的时候,很有可能等待较长时间才能成功拉取镜像完成部署。以及后期会碰到kubeadm join token过期等问题。单master也不适合用在生产环境,UI界面和监控后期还要自己配置维护,较为麻烦。而我们期望的是部署维护的过程要简单,工作重点应当是工作负载的构建上。
 

在这里向大家推荐华为云CCE,它与自建K8S的优劣对比如下:

centos安装单机版k8s centos部署k8s_linux_08