您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

CentOS7.8搭建Kubernetes集群(kubeadm方式)

Kubernetes集群的架构图

Kubernetes集群的搭建方式选择

     1、minikube学习体验方式

        minikube与 kind 类似,minikube 是一个工具, 能让你在本地运行 Kubernetes。 minikube 在你本地的个人计算机(包括 Windows、macOS 和 Linux PC)运行一个单节点的 Kubernetes 集群,以便你来尝试 Kubernetes 或者开展每天的开发工作。不能用于生产环境。

       官方地址:https://kubernetes.io/docs/setup/minikube/    

     2、kubeadm工具包方式

       Kubeadm也是一个工具,提供kubeadm init和kubeadm join等,用于快速部署Kubernetes集群。

      官方地址(英文):https://kubernetes.io/docs/reference/setup-tools/kubeadm/  

      官方网址(中文):https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/

    3、二进制包安装方式

  从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。

     说明

       生产环境中部署Kubernetes集群,只有Kubeadm和二进制包两种方式可选。

       二进制包部署Kubernetes集群,手动部署麻烦,但可以学习很多工作原理和细节,更有利于后期维护。

        Kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查,但可以快速构建起来。本文基于该方式进行。

搭建Kubernetes集群

        本文以Kubernetes 1.20.5版本为例!且如想安装最新版本,更换对应版本号或省略版本号即可。如未指定,下述命令在所有节点执行!

一、系统资源规划

节点名称主机名称CPU/内存网卡 磁盘IP地址OS版本
Master节点host1612核心/4Gens33100GB192.168.138.161CentOS7.8
Worker1节点host1622核心/4Gens33100GB192.168.138.162CentOS7.8
Worker2节点host1632核心/4Gens33100GB192.168.138.163CentOS7.8

二、系统软件配置

     1、docker环境检查

        1)、如之前有安装过,则可进行卸载:yum remove kubelet kubeadm kubectl

        2)、Kubernetes依赖docker容器,检查是否安装过docker:   yum list installed |grep docker-ce

      2、hosts设置

echo 192.168.138.161 host161 >> /etc/hosts
echo 192.168.138.162 host162 >> /etc/hosts
echo 192.168.138.163 host163 >> /etc/hosts

       3、设置NTP

yum -y install chrony

systemctl start chronyd
systemctl enable chronyd
systemctl status chronyd

chronyc sources

      4、设置SELinux、防火墙

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

      5、设置网桥

         配置L2网桥在转发包时会被iptables的FORWARD规则所过滤,CNI插件需要该配置

创建/etc/sysctl.d/k8s.conf文件,添加如下内容:

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

       执行命令,使修改生效:

modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf

     6、设置swap

       关闭系统swap分区:

swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak | grep -v swap > /etc/fstab
rm -rf /etc/fstab_bak

     7、设置ipvs

       安装ipvsadm ipset:

yum -y install ipvsadm ipset

       创建ipvs设置脚本:

cat > /etc/sysconfig/modules/ipvs.modules << EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

         执行脚本,验证修改结果:

chmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack_ipv4

三、Kubernetes集群安装配置

1、安装Docker

安装所需软件包:

yum -y install yum-utils device-mapper-persistent-data lvm2

设置稳定存储库:

yum-config-manager --add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker CE:

yum -y install docker-ce

启动Docker,并设置自启动:

systemctl start docker
systemctl enable docker
systemctl status docker

查看Dockers版本

docker version

2、设置Docker镜像源和Cgroup驱动

配置Docker镜像源和Cgroup驱动:

cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://ee0hcs4k.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

         注意:以上“https://ee0hcs4k.mirror.aliyuncs.com”可以自行在https://cr.console.aliyun.com/#/accelerator申请。

重启Docker,验证修改结果:

systemctl restart docker
docker info | grep Cgroup

3、安装kubelet、kubeadm和kubectl  

添加kubernetes存储库:

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
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

安装kubelet、kubeadm和kubectl:

Master节点:

yum -y install kubelet-1.20.5-0 kubeadm-1.20.5-0 kubectl-1.20.5-0

Worker节点:

yum -y install kubelet-1.20.5-0 kubeadm-1.20.5-0

启动kubelet,并设置自启动:

systemctl start kubelet
systemctl enable kubelet

此时kubelet缺省配置文件无法启动,可忽略状态。具体日志可查看

tail -200f /var/log/messages

停掉kubelet

systemctl stop kubelet

 

4、下载镜像

       由于镜像在google在Registry上,国内无法访问,需要手动从阿里云或其他Registry上下载

在Master节点上查看所需下载镜像:

kubeadm config images list --kubernetes-version 1.20.5

在Master节点上下载镜像:

kubeadm config images list --kubernetes-version 1.20.5 | sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#docker.io/registry.cn-hangzhou.aliyuncs.com/google_containers#g' | sh -x

在Master节点上修改镜像:

docker images | grep registry.cn-hangzhou.aliyuncs.com/google_containers | awk '{print "docker tag ",$1":"$2,$1":"$2}' | sed -e 's#registry.cn-hangzhou.aliyuncs.com/google_containers#k8s.gcr.io#2' | sh -x

在Master节点上删除无用镜像:

docker images | grep registry.cn-hangzhou.aliyuncs.com/google_containers | awk '{print "docker rmi ", $1":"$2}' | sh -x

在Master节点上查看镜像:

docker images

Worker节点也需部分镜像,按上述步骤下载。

 

5、初始化集群

如下操作需在Master节点执行

初始化集群:

kubeadm init --apiserver-advertise-address=192.168.138.161 --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.20.5

说明:

       –apiserver-advertise-address表示绑定的网卡IP
       –pod-network-cidr=10.244.0.0/16表示Pod将使用10.244.0.0/16网段地址,calico.yaml 文件须使用10.244.0.0/16网段,两者必须一致
       –kubernetes-version=v1.20.5指定Kubernetes版本,必须与实际版本一致

注意:

       该步骤会产生--token、--discovery-token-ca-cert-hash sha256值,这两个值在以下Work工作节点上会用到。

 

6、初始化过程说明

初始化过程如下:

(1)kubeadm执行初始化前的检查

(2)生成token和证书

(3)生成KubeConfig文件,kubelet需要这个文件与Master通信

(4)安装Master组件,组件镜像已下载指本地

(5)安装附加组件kube-proxy和kube-dns

(6)Kubernetes Master初始化成功

(7)提示如何配置kubectl

(8)提示如何安装Pod网络

(9)提示如何注册其他节点到Cluster
 

7、配置kubectl

在Master节点上配置kubectl:

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

8、安装CNI网络

在Master节点上部署CNI网络:

下载calico部署文件:

下载地址:https://docs.projectcalico.org/manifests/calico.yaml

在Master节点上修改calico.yaml

增加

- name: IP_AUTODETECTION_METHOD
  value: "interface=eth.*|en.*"
- name: CALICO_IPV4POOL_CIDR
  value: "10.244.0.0/16"

在Master节点上部署CNI网络:

kubectl apply -f calico.yaml

calico.yaml中的CIDR需与初始化集群中的参数一致

在Master节点上查看Pod状态:

kubectl get pod -o wide -n kube-system

9、添加Worker节点

如下操作需在Worker节点执行

初始化集群时,显示添加节点命令:

kubeadm join 192.168.138.161:6443 --token agnhtu.cflb1o3jxdmg2amp  --discovery-token-ca-cert-hash sha256:20c78b4f03baf5d43200decb9604cf9e0dbdc1c5527d652cde5c5cf3cc5cfbba

在Master节点上通过如下命令查看token和discovery-token-ca-cert-hash:

kubeadm token list
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

token有效时长为24h,通过如下命令创建:

kubeadm token create

在Master节点上查看节点状态:

kubectl get node

在Master节点上查看Pod状态:

kubectl get pod -o wide -n kube-system

10、kube-proxy开启ipvs

在Master节点上修改ConfigMap kube-proxy中的mode: “ipvs”:

kubectl edit configmap kube-proxy -n kube-system

在Master节点上重启各个节点上的kube-proxy pod:

kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'

验证修改成功:

kubectl get pod -n kube-system | grep kube-proxy
kubectl logs kube-proxy-27d5f -n kube-system

日志中打印出了Using ipvs Proxier,说明ipvs模式已经开启。

四、部署dashboard

           参考:

           1、https://blog.csdn.net/weixin_40039683/article/details/112886735?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

           2、https://blog.csdn.net/networken/article/details/85607593

 

五、参考资料

1、https://blog.csdn.net/weixin_41004350/article/details/86031445
2、https://kubernetes.io/zh/#
3、https://blog.csdn.net/mengshicheng1992/article/details/115549511

4、https://ke.qq.com/course/3450378


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进