平台规划

image-20220713210814148

部署方式

​ 目前部署K8s集群的方式主要有两种:

​ Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可 控,推荐使用二进制包部署 Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。博主不是专业的运维,对于K8s也主要是学习其使用方式,所以这里使用kubeadm的方式进行部署。

硬件要求

​ 在开始之前,部署Kubernetes集群机器需要满足以下几个条件:

  • 一台或多台机器,操作系统 CentOS7.x-86_x64
  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
  • 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
  • 禁止swap分区

架构规划

​ 由于博主主要是用来学习,所以是在自己电脑上搭建的虚拟机集群,毕竟云服务器有点小贵😟。集群信息如下:

角色 ip 主机名 配置
mster01 192.168.194.111 master1 2c4g 30g
node1 192.168.194.112 node1 2c4g 20g
node2 192.168.194.113 node2 2c4g 20g

​ 关于Vmware 的使用这里不再展开,不会的朋友可以自行百度,后面有时间的话可能会出一期相关内容。(大概率不会😜)

​ 博主这里之间使用之前搭建的纯净系统克隆三台机器出来进行环境的搭建,并配置好资源、网络等相关内容。

环境准备

​ 基本信息配置完成之后,开始搭建,首先将系统相关内容做初始化操作:

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时

# 关闭swap
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

# 根据规划设置主机名
hostnamectl set-hostname <hostname>

# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.194.111 master1
192.168.194.112 master1
192.168.194.113 master1
EOF

# 将桥接的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  # 生效

# 时间同步
yum install ntpdate -y
ntpdate time.windows.com

安装Docker

​ 关于docker的安装可以参考本人的博客:【经验宝宝】Centos系统安装Docker 并在三台机器上都执行该命令。

安装kubeadm,kubelet和kubectl

​ 由于K8s版本更新较快,且1.24不再默认支持docker作为容器运行时,这里博主选择了一个不老也不是特别新的版本,有需要的可以根据自己的需求进行替换。所有机器均需安装

yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0
systemctl enable kubelet

初始化Master节点、加入Node节点

​ 记得将ip地址更换为自己的master节点的ip地址,版本更换为自己下载的对应版本。

kubeadm init \
  --apiserver-advertise-address=192.168.194.111 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.20.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16

image-20220716174807595

​ 当出现上图画面则说明初始化成功,按照要求执行命令

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

## 如果是root可以执行以下命令
export KUBECONFIG=/etc/kubernetes/admin.conf

​ 到node节点运行join命令,将节点加入到master

kubeadm join 192.168.194.111:6443 --token hl9y83.3kpoygotct3x59gu \
    --discovery-token-ca-cert-hash sha256:75d2c78b3e93160152c55b9185efcf0a61ebc63994cf1b5e03c3dcdc5b2a97aa

部署CNI网络插件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

​ 由于该文件位于外网,国内可能有部分朋友无法下载,可以点击该链接进行下载 kube-flannel.yml

​ 应用插件

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 博主链接
kubectl apply -f https://sso.simplestark.com/halo/kube-flannel.yml
# 或者下载后上传到服务器,指定路径应用
kubectl apply -f /路径/kube-flannel.yml

​ 查看对应组件(pod)是否启动成功(status 全部为Running),1.20.0的如下图所示:

kubectl get pods -n kube-system

image-20220716175944458

​ 查看节点状态是否准备就绪(status 全部为Ready):

kubectl get nodes

image-20220716180134660

​ 如图所示即为成功,到此为止,K8s 1.20.0 就安装成功了!

测试集群

​ 在Kubernetes集群中创建一个Nginx pod,验证是否正常运行:

# 创建一个Nginx 容器
kubectl create deployment nginx --image=nginx
# 暴露外网端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看Pod服务
kubectl get pod,svc

image-20220716180614159

​ 如图所示即为该pod 暴露的外网端口,此时使用任一节点的ip+30443均可以访问该nginx服务,大公告成!

image-20220716180738213

参考文档

  1. Kubernetes 中文文档
  2. B站尚硅谷-Kubernetes(k8s)入门到实战教程丨全新升级完整版