CentOS脚本快速部署K8S

举报
云叔记 发表于 2022/10/20 10:03:04 2022/10/20
【摘要】 在CentOS 7下,使用脚本快速构建K8S运行环境。

一、前言

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

图片.png

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

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


后续操作

#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

图片.png

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

图片.png

获取不过期token,join命令,并执行安装flannel网络

图片.png

执行join命令,node节点加入成功。


验证部署结果

kubectl get pod --all-namespaces

kubectl get node

图片.png


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

验证效果如下:
图片.png

访问:http://任意node节点EIP:端口号。(端口号:就是上图红圈的位置,也就是NodePort的端口号)


结束语

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

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

图片.png

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。