从零开始搭建kubernetes(一)_ Kubernetes集群搭建

引言

笔者在自己搭建kubernetes时走了很多弯路, 在这里记录下推荐的方式, 希望后面的小伙伴能快速实现环境的搭建. 在此推荐采用kuboard可视化插件.该插件官方提供了集群搭建脚本. 搭建方式有2种, 推荐旧版安装方式.这样能让自己对kubernetes的集群有更清楚的认识.
笔者服务器情况:
6台4核8G 阿里云ECS服务器
3台4核16G 阿里云ECS服务器

集群搭建

kubeadm安装(Master和所有Work节点都要执行此命令)

# 在 master 节点和 worker 节点都要执行
# 最后一个参数 1.22.3 用于指定 kubenetes 版本,支持所有 1.22.x 版本的安装

# 阿里云 docker hub 镜像
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
curl -sSL https://kuboard.cn/install-script/v1.22.x/install_kubelet.sh | sh -s 1.22.3
# 文章最后会贴出sh脚本源文件, 如果以上地址不可用, 直接运行文末脚本即可.

初始化Master节点(只在Master节点执行)

将下图中的localhost改为节点所在的局域网(内网)ip.

# 只在 master 节点执行
# 替换 localhost 为 master 节点实际 IP(请使用内网 IP)
# export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令
export MASTER_IP=localhost
# 替换 apiserver.demo 为 您想要的 dnsName
export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.0/16
echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.22.x/init_master.sh | sh -s 1.22.3
# 文章最后会贴出sh脚本源文件, 如果以上地址不可用, 直接运行文末脚本即可.

检查Master初始化结果


# 只在 master 节点执行

# 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
watch kubectl get pod -n kube-system -o wide

# 查看 master 节点初始化结果
kubectl get nodes -o wide

安装flannel网络插件(推荐)

export POD_SUBNET=10.100.0.0/16
wget https://kuboard.cn/install-script/flannel/flannel-v0.14.0.yaml
sed -i "s#10.244.0.0/16#${POD_SUBNET}#" flannel-v0.14.0.yaml
kubectl apply -f ./flannel-v0.14.0.yaml

初始化work节点

将下图中的localhost改为节点所在的局域网(内网)ip

# 只在 worker 节点执行
# 替换 localhost 为 master 节点的内网 IP
export MASTER_IP=localhost
# 替换 apiserver.demo 为初始化 master 节点时所使用的 APISERVER_NAME
export APISERVER_NAME=apiserver.demo
echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts

将Work加点加入到Master中组件集群

首先在Master节点运行以下命令, 获取token

# 只在 master 节点执行
kubeadm token create --print-join-command

在Work节点执行

# 替换为 master 节点上 kubeadm token create 命令的输出
kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt     --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303

耐心等待10秒左右即可完成work节点的初始化.
查看集群节点状态

kubectl get nodes -o wide

此处为笔者控制图截图


终端截图

可以看到, work节点已经加入集群, 但是ROLES为, 笔者是强迫症患者, 所以手动打上了标签, 将其标记为work.

替换以下命令的examplename为自己的主机名称. 见截图中第一列 马赛克的name

kubectl label node examplename node-role.kubernetes.io/worker=worker

执行命令后结果见截图第三行所示

通过以上步骤即可完成集群搭建.

常用命令

#重启docker
systemctl daemon-reload
systemctl restart docker
未完待续...



 
 
#重启kubelet
systemctl restart kubelet.service

#重置kubernetes
kubeadm reset
#然后根据控制台打印的输出命令删除残余文件

附件

以下为上文中在线sh脚本地址, 为防止地址不可用, 贴出源码, 如果地址不可用,自行下载执行即可.

install_kubelet.sh

#!/bin/bash

# 在 master 节点和 worker 节点都要执行

# 安装 containerd
# 参考文档如下
# https://kubernetes.io/docs/setup/production-environment/container-runtimes/#containerd

cat < /etc/containerd/config.toml

sed -i "s#k8s.gcr.io#registry.aliyuncs.com/k8sxio#g"  /etc/containerd/config.toml
sed -i '/containerd.runtimes.runc.options/a\ \ \ \ \ \ \ \ \ \ \ \ SystemdCgroup = true' /etc/containerd/config.toml
sed -i "s#https://registry-1.docker.io#${REGISTRY_MIRROR}#g"  /etc/containerd/config.toml


systemctl daemon-reload
systemctl enable containerd
systemctl restart containerd


# 安装 nfs-utils
# 必须先安装 nfs-utils 才能挂载 nfs 网络存储
yum install -y nfs-utils
yum install -y wget

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

# 关闭 SeLinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# 关闭 swap
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab

# 配置K8S的yum源
cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 卸载旧版本
yum remove -y kubelet kubeadm kubectl

# 安装kubelet、kubeadm、kubectl
# 将 ${1} 替换为 kubernetes 版本号,例如 1.20.1
yum install -y kubelet-${1} kubeadm-${1} kubectl-${1}

crictl config runtime-endpoint /run/containerd/containerd.sock

# 重启 docker,并启动 kubelet
systemctl daemon-reload
systemctl enable kubelet && systemctl start kubelet

containerd --version
kubelet --version

init_master.sh

#!/bin/bash

# 只在 master 节点执行

# 脚本出错时终止执行
set -e

if [ ${#POD_SUBNET} -eq 0 ] || [ ${#APISERVER_NAME} -eq 0 ]; then
  echo -e "\033[31;1m请确保您已经设置了环境变量 POD_SUBNET 和 APISERVER_NAME \033[0m"
  echo 当前POD_SUBNET=$POD_SUBNET
  echo 当前APISERVER_NAME=$APISERVER_NAME
  exit 1
fi


# 查看完整配置选项 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2
rm -f ./kubeadm-config.yaml
cat < ./kubeadm-config.yaml
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v${1}
imageRepository: registry.aliyuncs.com/k8sxio
controlPlaneEndpoint: "${APISERVER_NAME}:6443"
networking:
  serviceSubnet: "10.96.0.0/16"
  podSubnet: "${POD_SUBNET}"
  dnsDomain: "cluster.local"
dns:
  type: CoreDNS
  imageRepository: swr.cn-east-2.myhuaweicloud.com${2}
  imageTag: 1.8.0

---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF

# kubeadm init
# 根据您服务器网速的情况,您需要等候 3 - 10 分钟
echo ""
echo "抓取镜像,请稍候..."
kubeadm config images pull --config=kubeadm-config.yaml
echo ""
echo "初始化 Master 节点"
kubeadm init --config=kubeadm-config.yaml --upload-certs

# 配置 kubectl
rm -rf /root/.kube/
mkdir /root/.kube/
cp -i /etc/kubernetes/admin.conf /root/.kube/config

文章参考kuboard官方安装教程.

你可能感兴趣的:(从零开始搭建kubernetes(一)_ Kubernetes集群搭建)