k8s Kubernetes 1.26 部署安装示例 双控制(双master)节点(k8s ipv6双栈)

k8s Kubernetes 1.26 部署安装示例 双控制(双master)节点目录
初始化安装k8s集群的实验环境 修改机器IP,变成静态IP 关闭selinux,所有k8s机器均操作 配置机器主机名 配置

目录

初始化安装k8s集群的实验环境

将机器的IP更改为静态IP。

如果我关闭selinux,所有k8s 机器都可以工作

配置机器主机名

配置hosts文件以使用主机名相互访问。

配置主机间无密码登录

关闭交换分区以提高性能

关闭防火墙防火墙

配置阿里云仓库源

配置安装k8s组件所需的阿里云仓库源

安装基础包

安装Containerd服务

安装容器

安装初始化k8s所需的软件包。

kubeadm 初始化k8s 集群

扩展您的k8s 集群- 添加您的第一个工作节点

安装Kubernetes 网络组件- Calico

calico网络插件配置文件说明

测试使用k8s创建的Pod是否可以正常访问网络

CTR 和CRICTL 之间的区别

扩展您的k8s 集群并添加第二个工作节点

扩容k8s集群并添加第二个控制节点

作者:韩胜超老师

ps: 国内很多镜像站点都已经关闭,所以如果你想使用海外镜像源来代替,就需要一个神奇的网络环境。由于直接复制粘贴文档中的YAML文件配置可能会导致格式错误,因此将实验所需的YAML文件和本地包打包在网盘链接:https://pan.baidu.com /s/11NM-WkI7KCza68GY_-8OQw

提取码:mew.

规划k8s环境:

podSubnet(pod网段)10.244.0.0/16

serviceSubnet(业务网段): 10.96.0.0/12

规划实验环境:

操作系统:centos7.9

配置:4Gib内存/4vCPU/60G硬盘

网络:NAT模式

K8S集群角色

知识产权

CPU名称

安装的组件

控制节点

192.168.40.180

闲潮大师1

apiserver、控制器管理器、调度、kubelet、etcd、kube-proxy、容器运行时、calico

工作节点

192.168.40.181

先潮节点1

Kube 代理、calico、coredns、容器运行时、kubelet

初始化安装k8s集群的实验环境

修改机器IP,变成静态IP

vim /etc/sysconfig/network-scripts/ifcfg-ens33 文件

类型=以太网

PROXY_METHOD=无

BROWSER_ONLY=否

BOOTPROTO=静态

IPADDR=192.168.40.180

网络掩码=255.255.255.0

网关=192.168.40.2

DNS1=192.168.40.2

去浮=是

IPV4_FAILURE_FATAL=否

IPV6INIT=是

IPV6_AUTOCONF=是

IPV6_DEFROUTE=是

IPV6_FAILURE_FATAL=否

IPV6_ADDR_GEN_MODE=稳定的隐私

名称=ens33

设备=ens33

开机=是

#更改配置文件后,必须重新启动网络服务才能使配置生效。重启网络服务的命令是:

服务网络重启

注意:配置/etc/sysconfig/network-scripts/ifcfg-ens33 文件的步骤:

NAME=ens33 #网卡名称。确保它与设备名称匹配。

DEVICE=ens33 #网卡设备名称。 ip addr 显示您的网卡设备名称。每台机器的名称可能不同,因此您必须编写自己的名称。

BOOTPROTO=static #static表示静态IP地址

ONBOOT=yes #开机后自动启动网络。一定是的

IPADDR=192.168.40.180 #ip地址。它必须与您的计算机所在的网段匹配。

NETMASK=255.255.255.0 #子网掩码。它必须与您的计算机所在的网段匹配。

GATEWAY=192.168.1.2 #网关,在电脑上打开cmd输入ipconfig /all确认。

DNS1=192.168.1.2 #DNS,在电脑上打开cmd输入ipconfig /all查看。

每个节点运行以下命令来更新yum 源和操作系统。

百胜更新-y

在每台机器上安装基础包。

yum install -y 设备映射器持久数据lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-develcurlcurl-devel 解压sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib -devel python-devel epel-release openssh-server socat ipvsadm conntrack telnet ipvsadm

关闭selinux,所有k8s机器均操作

sed -i \’s/SELINUX=enforcing/SELINUX=disabled/g\’ /etc/selinux/config

修改#selinux配置文件后,重启机器使selinux配置永久生效,登录机器,执行以下命令:

获得力量

如果显示#Disabled,则selinux已经终止。

配置机器主机名

在192.168.40.180 上运行:

hostnamectl set-主机名xianchaomaster1 bash

在192.168.40.181 上运行:

hostnamectl set-主机名xianchaonode1 bash

配置主机hosts文件,相互之间通过主机名互相访问

修改每台机器上的/etc/hosts文件,在文件末尾添加以下内容:

192.168.40.180 闲潮大师1

192.168.40.181xianchaonode1

修改后的文件为:

127.0.0.1 本地主机本地主机.本地域本地主机4 本地主机4.本地域4

:1 本地主机本地主机.本地域本地主机6 本地主机6.本地域6

192.168.40.180 闲潮大师1

192.168.40.181xianchaonode1

配置主机之间无密码登录

配置xinchaimaster1免密码登录其他机器

[root@xianchaomaster1 ~]# ssh-keygen #一路按回车,无需输入密码

将本地生成的密钥文件和私钥文件复制到远程主机。

[root@xianchaomaster1 ~]# ssh-copy-id xianchaonode1

关闭交换分区swap,提升性能

#永久关闭:注释交换挂载,将注释添加到交换行的开头

[root@xianchaomaster1 ~]# vim /etc/fstab

#/dev/mapper/centos-swap 交换交换默认0 0

[root@xianchaonode1 ~]# vim /etc/fstab

#/dev/mapper/centos-swap 交换交换默认0 0

问题1:为什么要关闭交换分区?

当您的计算机内存不足时,将使用交换。但是,由于交换分区可提供更好的性能,因此默认情况下交换分区不可用。 Kubeadm初始化时会检测swap是否关闭。如果不关闭,初始化将会失败。如果您不想关闭交换分区,请在安装k8s 时指定–ignore-preflight-errors=Swap 来解决问题。

修改机器内核参数

[root@xinchaomaster1 ~]# modprobe br_netfilter

[root@xianchaomaster1 ~]# 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

结束后

[root@xianchaomaster1 ~]# sysctl -p /etc/sysctl.d/k8s.conf

[root@xianchaonode1~]# sysctl -p /etc/sysctl.d/k8s.conf

[root@xianchaonode1 ~]# modprobe br_netfilter

[root@xianchaonode1~]# 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

结束后

[root@xianchaonode1~]# sysctl -p /etc/sysctl.d/k8s.conf

问题1:sysctl 是做什么的?

在运行时设置内核参数

-p 从指定文件加载系统参数。如果未指定,将从/etc/sysctl.conf加载。

问题2:为什么需要运行modprobe br_netfilter?

修改/etc/sysctl.d/k8s.conf文件,添加以下三行参数:

net.bridge.bridge-nf-call-ip6tables=1

net.bridge.bridge-nf-call-iptables=1

net.ipv4.ip_forward=1

sysctl -p /etc/sysctl.d/k8s.conf 报告错误。

sysctl: 无法统计/proc/sys/net/bridge/bridge-nf-call-ip6tables: 没有这样的文件或目录

sysctl: 无法统计/proc/sys/net/bridge/bridge-nf-call-iptables: 没有这样的文件或目录

解决了:

modprobe br_netfilter

问题3:为什么要启用net.bridge.bridge-nf-call-iptables 内核参数?

在centos上安装docker时,运行docker info会显示以下警告:

警告: Bridge-nf-call-iptables 已禁用

警告: Bridge-nf-call-ip6tables 已禁用

解决了:

vim /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables=1

net.bridge.bridge-nf-call-iptables=1

问题4:为什么需要启用net.ipv4.ip_forward=1参数?

kubeadm初始化k8s时报错。

这意味着ip_forward 未启用且必须启用。

net.ipv4.ip_forward是数据包转发。

出于安全考虑,Linux系统默认禁止数据包的传输。所谓转发是指如果主机有多个网卡,其中一个网卡接收到数据包后,根据数据包的目的IP地址将其发送到本机的另一块网卡上。该卡根据路由表继续发送数据包。通常这是路由器应该做的。

要在Linux 系统上启用路由和转发功能,必须设置Linux 内核参数net.ipv4.ip_forward。该参数指定Linux系统上当前对路由和转发功能的支持。值为0 表示禁止IP 转发,值为1 表示打开IP 转发功能。

关闭firewalld防火墙

[root@xianchaomaster1 ~]# systemctl 停止防火墙。 systemctl 禁用防火墙。

[root@xianchaonode1 ~]# systemctl 停止防火墙。 systemctl 禁用防火墙。

配置阿里云的repo源

#设置阿里云仓库源,在国内安装docker和containerd

[root@xianchaomaster1 ~]#yum install yum-utils -y

[root@xianchaonode1 ~]#yum install yum-utils -y

[root@xiaochaomaster1 ~]# yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@xianchaonode1 ~]# yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

配置安装k8s组件需要的阿里云的repo源

[root@xianchaomaster1 ~]#cat /etc/yum.repos.d/kubernetes.repo EOF

[库伯内特]

名称=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

有效=1

gpg检查=0

结束后

[root@xianchaonode1 ~]#cat /etc/yum.repos.d/kubernetes.repo EOF

[库伯内特]

名称=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

有效=1

gpg检查=0

结束后

配置时间同步

在xianchaimaster1 上运行:

#安装ntpdate命令

[root@xianchaomaster1 ~]# yum install ntpdate -y

#与网络时间同步

[root@xianchaomaster1 ~]# ntpdate cn.pool.ntp.org

#定时任务添加时间同步

[root@xinchaomaster1 ~]# crontab -e

* * * * * /usr/sbin/ntpdate cn.pool.ntp.org

#重启crond服务

[root@xianchaomaster1 ~]#重启服务crond

在xinchaonode1 上运行:

#安装ntpdate命令

[root@xianchaonode1 ~]# yum install ntpdate -y

#与网络时间同步

[root@xianchaonode1 ~]#ntpdate cn.pool.ntp.org

#定时任务添加时间同步

[root@xinchaonode1 ~]#crontab -e

* * * * * /usr/sbin/ntpdate cn.pool.ntp.org

#重启crond服务

[root@xinchaonode1 ~]#重启服务crond

安装基础软件包

[root@xianchaomaster1 ~]# yum install -y 设备映射器持久数据lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-develcurlcurl-devel unzip sudo ntp libaio-devel wget vim ncurses -devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack telnet ipvsadm

[root@xianchaonode1 ~]# yum install -y 设备映射器持久数据lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-develcurlcurl-devel unzip sudo ntp libaio-devel wget vim ncurses -devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack telnet ipvsadm

安装containerd服务

安装containerd,k8s从1.24开始使用containerd作为容器运行时。

[root@xianchaomaster1 ~]#yuminstallcontainerd.io-1.6.6 -y

接下来,生成containerd配置文件:

[root@xianchaomaster1 ~]#mkdir -p /etc/containerd

[root@xianchaomaster1 ~]#containerd 配置默认/etc/containerd/config.toml

修改配置文件。

打开/etc/containerd/config.toml

将SystemdCgroup=false 更改为SystemdCgroup=true。

将sandbox_image=\’k8s.gcr.io/pause:3.6\’ 更改为sandbox_image=\’registry.aliyuncs.com/google_containers/pause:3.7\’。

配置containerd在启动时启动并启动containerd。

[root@xiaochaomaster1 ~]#启用systemctl容器–now

[root@xianchaonode1 ~]#yuminstallcontainerd.io-1.6.6 -y

接下来,生成containerd配置文件:

[root@xianchaonode1 ~]#mkdir -p /etc/containerd

[root@xianchaonode1 ~]#containerd 配置默认/etc/containerd/config.toml

修改配置文件。

打开/etc/containerd/config.toml

将SystemdCgroup=false 更改为SystemdCgroup=true。

将sandbox_image=\’k8s.gcr.io/pause:3.6\’ 更改为sandbox_image=\’registry.aliyuncs.com/google_containers/pause:3.7\’。

配置containerd在启动时启动并启动containerd。

[root@xianchaonode1 ~]#启用systemctl容器–now

修改配置文件。

打开/etc/containerd/config.toml

将SystemdCgroup=false 更改为SystemdCgroup=true。

将sandbox_image=\’k8s.gcr.io/pause:3.6\’ 更改为sandbox_image=\’registry.aliyuncs.com/google_containers/pause:3.7\’。

将containerd配置为在引导时启动并启动containerd。

[root@xianchaonode2 ~]#启用systemctl容器–now

修改/etc/crictl.yaml文件。

[root@xianchaomaster1 ~]#cat /etc/crictl.yaml EOF

运行时端点: unix:///run/containerd/containerd.sock

image-endpoint: unix:///run/containerd/containerd.sock

超时: 10

调试: 错误

结束后

[root@xiaochaomaster1 ~]#systemctl 重启容器

[root@xianchaonode1 ~]#cat /etc/crictl.yaml EOF

运行时端点: unix:///run/containerd/containerd.sock

图像内窥镜

oint: unix:///run/containerd/containerd.sock

timeout: 10

debug: false

EOF

[root@xianchaonode1 ~]#systemctl restart  containerd

配置containerd镜像加速器,k8s所有节点均按照以下配置:

编辑vim /etc/containerd/config.toml文件

找到config_path = \”\”,修改成如下目录:

config_path = \”/etc/containerd/certs.d\”

#保存退出

mkdir /etc/containerd/certs.d/docker.io/ -p

vim /etc/containerd/certs.d/docker.io/hosts.toml

#写入如下内容:

[host.\”https://vh3bm52y.mirror.aliyuncs.com\”,host.\”https://registry.docker-cn.com\”]

  capabilities = [\”pull\”]

重启containerd:

systemctl restart containerd

备注:docker也要安装,docker跟containerd不冲突,安装docker是为了能基于dockerfile构建镜像

[root@xianchaomaster1 ~]#yum install  docker-ce  -y

[root@xianchaonode1 ~]#yum install  docker-ce  -y

[root@xianchaomaster1 ~]#systemctl enable docker –now

[root@xianchaonode1 ~]#systemctl enable docker –now

配置docker镜像加速器,k8s所有节点均按照以下配置

vim /etc/docker/daemon.json

写入如下内容:

{

 \”registry-mirrors\”:[\”https://vh3bm52y.mirror.aliyuncs.com\”,\”https://registry.docker-cn.com\”,\”https://docker.mirrors.ustc.edu.cn\”,\”https://dockerhub.azk8s.cn\”,\”http://hub-mirror.c.163.com\”]

}

重启docker:

systemctl restart docker

安装初始化k8s需要的软件包

[root@xianchaomaster1 ~]# yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0

[root@xianchaomaster1 ~]# systemctl enable kubelet

[root@xianchaonode1 ~]# yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0

[root@xianchaonode1 ~]# systemctl enable kubelet

注:每个软件包的作用

Kubeadm:  kubeadm是一个工具,用来初始化k8s集群的

kubelet:   安装在集群所有节点上,用于启动Pod的,kubeadm安装k8s,k8s控制节点和工作节点的组件,都是基于pod运行的,只要pod启动,就需要kubelet

kubectl:   通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

kubeadm初始化k8s集群

#设置容器运行时

[root@xianchaomaster1~]# crictl config runtime-endpoint unix:///run/containerd/containerd.sock

[root@xianchaonode1~]# crictl config runtime-endpoint unix:///run/containerd/containerd.sock

#使用kubeadm初始化k8s集群

[root@xianchaomaster1 ~]# kubeadm config print init-defaults > kubeadm.yaml

根据我们自己的需求修改配置,比如修改 imageRepository 的值,kube-proxy 的模式为 ipvs,需要注意的是由于我们使用的containerd作为运行时,所以在初始化节点的时候需要指定cgroupDriver为systemd

kubeadm.yaml配置文件如下:

apiVersion: kubeadm.k8s.io/v1beta3

。。。

kind: InitConfiguration

localAPIEndpoint:

  advertiseAddress: 192.168.40.180 #控制节点的ip

  bindPort: 6443

nodeRegistration:

  criSocket: unix:///run/containerd/containerd.sock  #指定containerd容器运行时

  imagePullPolicy: IfNotPresent

  name:  xianchaomaster1 #控制节点主机名

  taints: null

apiVersion: kubeadm.k8s.io/v1beta3

certificatesDir: /etc/kubernetes/pki

clusterName: kubernetes

controllerManager: {}

dns: {}

etcd:

  local:

    dataDir: /var/lib/etcd

imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

# 指定阿里云镜像仓库地址

kind: ClusterConfiguration

kubernetesVersion: 1.26.0 #k8s版本

networking:

  dnsDomain: cluster.local

  podSubnet: 10.244.0.0/16 #指定pod网段, 需要新增加这个

  serviceSubnet: 10.96.0.0/12 #指定Service网段

scheduler: {}

#在文件最后,插入以下内容,(复制时,要带着—):

apiVersion: kubeproxy.config.k8s.io/v1alpha1

kind: KubeProxyConfiguration

mode: ipvs

apiVersion: kubelet.config.k8s.io/v1beta1

kind: KubeletConfiguration

cgroupDriver: systemd

#基于kubeadm.yaml初始化k8s集群

[root@xianchaomaster1 ~]# ctr -n=k8s.io images import k8s_1.26.0.tar.gz

[root@xianchaonode1 ~]# ctr -n=k8s.io images import k8s_1.26.0.tar.gz

备注:k8s_1.26.0.tar.gz这个文件如何来的?

这个文件把安装k8s需要的镜像都集成好了,这个是我第一次安装1.26.0这个版本,获取到对应的镜像,通过ctr images export 这个命令把镜像输出到k8s_1.26.0.tar.gz文件,如果大家安装其他版本,那就不需要实现解压镜像,可以默认从网络拉取镜像即可。

ctr是containerd自带的工具,有命名空间的概念,若是k8s相关的镜像,都默认在k8s.io这个命名空间,所以导入镜像时需要指定命令空间为k8s.io

#使用ctr命令指定命名空间导入镜像

ctr -n=k8s.io images import k8s_1.26.0.tar.gz

#查看镜像,可以看到可以查询到了

crictl images

[root@xianchaomaster1 ~]# kubeadm init –config=kubeadm.yaml –ignore-preflight-errors=SystemVerification

显示如下,说明安装完成:

特别提醒:–image-repository registry.aliyuncs.com/google_containers为保证拉取镜像不到国外站点拉取,手动指定仓库地址为registry.aliyuncs.com/google_containers。kubeadm默认从k8s.gcr.io拉取镜像。   我们本地有导入到的离线镜像,所以会优先使用本地的镜像。

mode: ipvs 表示kube-proxy代理模式是ipvs,如果不指定ipvs,会默认使用iptables,但是iptables效率低,所以我们生产环境建议开启ipvs,阿里云和华为云托管的K8s,也提供ipvs模式,如下:

#配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理

[root@xianchaomaster1 ~]# mkdir -p $HOME/.kube

[root@xianchaomaster1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@xianchaomaster1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

[root@xianchaomaster1 ~]# kubectl get nodes

NAME              STATUS         ROLES                  AGE     VERSION

xianchaomaster1   NotReady       control-plane         2m25s   v1.26.0

扩容k8s集群-添加第一个工作节点

在xianchaomaster1上查看加入节点的命令:

[root@xianchaomaster1 ~]# kubeadm token create –print-join-command

显示如下:

kubeadm join 192.168.40.180:6443 –token vulvta.9ns7da3saibv4pg1     –discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a

把xianchaonode1加入k8s集群:

[root@xianchaonode1~]# kubeadm join 192.168.40.180:6443 –token vulvta.9ns7da3saibv4pg1     –discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a –ignore-preflight-errors=SystemVerification

#看到上面说明xianchaonode1节点已经加入到集群了,充当工作节点

#在xianchaomaster1上查看集群节点状况:

[root@xianchaomaster1 ~]# kubectl get nodes

NAME              STATUS     ROLES               AGE   VERSION

xianchaomaster1      Ready   control-plane,master      49m   v1.26.0

xianchaonode1      Ready   <none>                    39s   v1.26.0

#可以对xianchaonode1打个标签,显示work

[root@xianchaomaster1 ~]# kubectl label nodes xianchaonode1 node-role.kubernetes.io/work=work

[root@xianchaomaster1 ~]# kubectl get nodes

NAME              STATUS     ROLES           AGE     VERSION

xianchaomaster1   NotReady   control-plane   10m     v1.26.0

xianchaonode1     NotReady   work           27s     v1.26.0

安装kubernetes网络组件-Calico

把安装calico需要的镜像calico.tar.gz传到xianchaomaster1和xianchaonode1节点,手动解压:

[root@xianchaomaster1 ~]# ctr -n=k8s.io images import calico.tar.gz

[root@xianchaonode1 ~]# ctr -n=k8s.io images import calico.tar.gz

上传calico.yaml到xianchaomaster1上,使用yaml文件安装calico 网络插件 。

[root@xianchaomaster1 ~]# kubectl apply -f  calico.yaml

注:在线下载配置文件地址是: https://docs.projectcalico.org/manifests/calico.yaml

[root@xianchaomaster1 ~]# kubectl get node

NAME              STATUS   ROLES           AGE   VERSION

xianchaomaster1   Ready    control-plane   36m   v1.26.0

xianchaonode1     Ready    work            21m   v1.26.0

calico网络插件配置文件说明

1、Daemonset配置

……

containers:

        # Runs calico-node container on each Kubernetes node. This

        # container programs network policy and routes on each

        # host.

        – name: calico-node

          image: docker.io/calico/node:v3.18.0

……

          env:

            # Use Kubernetes API as the backing datastore.

            – name: DATASTORE_TYPE

              value: \”kubernetes\”

            # Cluster type to identify the deployment type

            – name: CLUSTER_TYPE

              value: \”k8s,bgp\”

            # Auto-detect the BGP IP address.

            – name: IP

              value: \”autodetect\”

         #pod网段

         – name: CALICO_IPV4POOL_CIDR

value: \”10.244.0.0/16\”

            # Enable IPIP

            – name: CALICO_IPV4POOL_IPIP

              value: \”Always\”

IP_AUTODETECTION_METHOD:获取Node IP地址的方式,默认使用第1个网络接口的IP地址,对于安装了多块网卡的Node,可以使用正则表达式选择正确的网卡,例如\”interface=eth.*\”表示选择名称以eth开头的网卡的IP地址。

– name: IP_AUTODETECTION_METHOD

value: \”interface=ens33\”

测试在k8s创建pod是否可以正常访问网络

#把busybox-1-28.tar.gz上传到xianchaonode1节点,手动解压

[root@xianchaonode1 ~]# ctr -n k8s.io images import busybox-1-28.tar.gz

[root@xianchaomaster1 ~]# kubectl run busybox –image docker.io/library/busybox:1.28  –image-pull-policy=IfNotPresent –restart=Never –rm -it busybox — sh

/ # ping www.baidu.com

PING www.baidu.com (39.156.66.18): 56 data bytes

64 bytes from 39.156.66.18: seq=0 ttl=127 time=39.3 ms

#通过上面可以看到能访问网络,说明calico网络插件已经被正常安装了

/ # nslookup kubernetes.default.svc.cluster.local

Server:    10.96.0.10

Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default.svc.cluster.local

Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local

/ # exit #退出pod

10.96.0.10 就是我们coreDNS的clusterIP,说明coreDNS配置好了。

解析内部Service的名称,是通过coreDNS去解析的。

#注意:

busybox要用指定的1.28版本,不能用最新版本,最新版本,nslookup会解析不到dns和ip

ctr和crictl区别

背景:在部署k8s的过程中,经常要对镜像进行操作(拉取、删除、查看等)

问题:使用过程中会发现ctr和crictl有很多相同功能,也有些不同,那区别到底在哪里?

说明:

1.ctr是containerd自带的CLI命令行工具,crictl是k8s中CRI(容器运行时接口)的客户端,k8s使用该客户端和containerd进行交互;

[root@xianchaonode1 ~]# cat /etc/crictl.yaml

runtime-endpoint: unix:///run/containerd/containerd.sock

image-endpoint: unix:///run/containerd/containerd.sock

timeout: 10

debug: false

pull-image-on-create: false

disable-pull-on-run: false

systemctl restart  containerd

2.ctr和crictl命令具体区别如下,也可以–help查看。crictl缺少对具体镜像的管理能力,可能是k8s层面镜像管理可以由用户自行控制,能配置pod里面容器的统一镜像仓库,镜像的管理可以有habor等插件进行处理。

扩容k8s集群,添加第二个工作节点

启动一台新的机器xianchaonode2

 修改机器IP,变成静态IP

vim /etc/sysconfig/network-scripts/ifcfg-ens33文件

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=static

IPADDR=192.168.40.182

NETMASK=255.255.255.0

GATEWAY=192.168.40.2

DNS1=192.168.40.2

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=ens33

DEVICE=ens33

ONBOOT=yes

#修改配置文件之后需要重启网络服务才能使配置生效,重启网络服务命令如下:

service network restart

注:/etc/sysconfig/network-scripts/ifcfg-ens33文件里的配置说明:

NAME=ens33    #网卡名字,跟DEVICE名字保持一致即可

DEVICE=ens33   #网卡设备名,大家ip addr可看到自己的这个网卡设备名,每个人的机器可能这个名字不一样,需要写自己的

BOOTPROTO=static   #static表示静态ip地址

ONBOOT=yes    #开机自启动网络,必须是yes

IPADDR=192.168.40.182   #ip地址,需要跟自己电脑所在网段一致

NETMASK=255.255.255.0  #子网掩码,需要跟自己电脑所在网段一致

GATEWAY=192.168.1.2   #网关,在自己电脑打开cmd,输入ipconfig /all可看到

DNS1=192.168.1.2    #DNS,在自己电脑打开cmd,输入ipconfig /all可看到 

   

执行如下命令更新yum源和操作系统:

yum update -y

安装基础软件包:

yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack telnet ipvsadm

 关闭selinux,所有k8s机器均操作

sed -i \’s/SELINUX=enforcing/SELINUX=disabled/g\’ /etc/selinux/config

#修改selinux配置文件之后,重启机器,selinux配置才能永久生效,重启之后,登录到机器,执行如下命令:

getenforce

#如果显示Disabled说明selinux已经关闭

 配置机器主机名

在192.168.40.182上执行如下:

hostnamectl set-hostname xianchaonode2 && bash

 配置主机hosts文件,相互之间通过主机名互相访问

修改每台机器的/etc/hosts文件,文件最后增加如下内容:

192.168.40.180   xianchaomaster1 

192.168.40.181   xianchaonode1 

192.168.40.182   xianchaonode2

修改之后的文件如下:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.40.180   xianchaomaster1

192.168.40.181   xianchaonode1 

192.168.40.182   xianchaonode2

 配置xianchaomaster1登录xianchaonode2免密码登录

配置xianchaomaster1到其他机器免密登录

把本地生成的密钥文件和私钥文件拷贝到远程主机

[root@xianchaomaster1 ~]# ssh-copy-id xianchaonode2

 关闭交换分区swap,提升性能

[root@xianchaonode2 ~]# swapoff -a

[root@xianchaonode2 ~]# vim /etc/fstab

#/dev/mapper/centos-swap swap      swap    defaults        0 0

1.1.7 修改机器内核参数

[root@xianchaonode2 ~]# modprobe br_netfilter

[root@xianchaonode2~]# 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

[root@ xianchaonode2~]# sysctl -p /etc/sysctl.d/k8s.conf

1.1.8 关闭firewalld防火墙

[root@xianchaonode2~]# systemctl stop firewalld ; systemctl disable firewalld

1.1.9 配置阿里云的repo源

[root@xianchaonode2 ~]#yum install yum-utils -y

[root@xianchaonode2 ~]# yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.1.10 配置安装k8s组件需要的阿里云的repo源

[root@xianchaonode2 ~]#cat >  /etc/yum.repos.d/kubernetes.repo <<EOF

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

gpgcheck=0

EOF

1.1.11 配置时间同步

在xianchaonode2上执行如下:

#安装ntpdate命令

[root@xianchaonode2 ~]# yum install ntpdate -y

#跟网络时间做同步

[root@xianchaonode2 ~]#ntpdate cn.pool.ntp.org

#把时间同步做成计划任务

[root@xianchaonode2 ~]#crontab -e

* * * * * /usr/sbin/ntpdate   cn.pool.ntp.org

1.2.1 安装containerd

[root@xianchaonode2 ~]#yum install  containerd.io-1.6.6 -y

接下来生成 containerd 的配置文件:

[root@xianchaonode2 ~]#mkdir -p /etc/containerd

[root@xianchaonode2 ~]#containerd config default > /etc/containerd/config.toml

修改配置文件:

打开/etc/containerd/config.toml

把SystemdCgroup = false修改成SystemdCgroup = true

把sandbox_image = \”k8s.gcr.io/pause:3.6\”修改成sandbox_image=\”registry.aliyuncs.com/google_containers/pause:3.7\”

配置 containerd 开机启动,并启动 containerd

[root@xianchaonode2 ~]#systemctl enable containerd  –now

修改/etc/crictl.yaml文件

[root@xianchaonode2 ~]#cat > /etc/crictl.yaml <<EOF

runtime-endpoint: unix:///run/containerd/containerd.sock

image-endpoint: unix:///run/containerd/containerd.sock

timeout: 10

debug: false

EOF

[root@xianchaonode2 ~]#systemctl restart  containerd

配置containerd镜像加速器,按照以下方法配置:

编辑vim /etc/containerd/config.toml文件

找到config_path = \”\”,修改成如下目录:

config_path = \”/etc/containerd/certs.d\”

#保存退出

mkdir /etc/containerd/certs.d/docker.io/ -p

vim /etc/containerd/certs.d/docker.io/hosts.toml

#写入如下内容:

[host.\”https://vh3bm52y.mirror.aliyuncs.com\”,host.\”https://registry.docker-cn.com\”]

  capabilities = [\”pull\”,\”push\”]

重启containerd:

systemctl restart containerd

备注:docker也要安装,docker跟containerd不冲突,安装docker是为了能基于dockerfile构建镜像

[root@xianchaonode2 ~]#yum install  docker-ce  -y

[root@xianchaonode2 ~]#systemctl enable docker –now

配置docker镜像加速器

vim /etc/docker/daemon.json

写入如下内容:

{

 \”registry-mirrors\”:[\”https://vh3bm52y.mirror.aliyuncs.com\”,\”https://registry.docker-cn.com\”,\”https://docker.mirrors.ustc.edu.cn\”,\”https://dockerhub.azk8s.cn\”,\”http://hub-mirror.c.163.com\”]

}

重启docker:

systemctl restart docker

1.3、安装初始化k8s需要的软件包

[root@xianchaonode2 ~]# yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0

[root@xianchaonode2 ~]# systemctl enable kubelet

注:每个软件包的作用

Kubeadm:  kubeadm是一个工具,用来初始化k8s集群的

kubelet:   安装在集群所有节点上,用于启动Pod的,kubeadm安装k8s,k8s控制节点和工作节点的组件,都是基于pod运行的,只要pod启动,就需要kubelet

kubectl:   通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

把xianchaonode2加入到K8s集群:

在xianchaomaster1上查看加入节点的命令:

[root@xianchaomaster1 ~]# kubeadm token create –print-join-command

显示如下:

kubeadm join 192.168.40.180:6443 –token vulvta.9ns7da3saibv4pg1     –discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a

把xianchaonode2加入k8s集群:

[root@xianchaonode2 ~]# ctr -n=k8s.io images import k8s_1.26.0.tar.gz

[root@xianchaonode2 ~]# ctr -n=k8s.io images import calico.tar.gz

[root@xianchaonode2~]# kubeadm join 192.168.40.180:6443 –token vulvta.9ns7da3saibv4pg1     –discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a –ignore-preflight-errors=SystemVerification

#在xianchaomaster1上查看集群节点状况:

[root@xianchaomaster1 ~]# kubectl get nodes

NAME              STATUS     ROLES               AGE   VERSION

xianchaomaster1      Ready   control-plane,master      49m   v1.26.0

xianchaonode1        Ready   <none>                    39s   v1.26.0

xianchaonode2      Ready   <none>                    39s   v1.26.0

扩容k8s集群,添加第二个控制节点

启动一台新的机器xianchaomaster2

配置静态ip

ip:192.168.40.186

安装基础软件包:

yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack telnet ipvsadm

关闭selinux,所有k8s机器均操作

sed -i \’s/SELINUX=enforcing/SELINUX=disabled/g\’ /etc/selinux/config

#修改selinux配置文件之后,重启机器,selinux配置才能永久生效,重启之后,登录到机器,执行如下命令:

getenforce

#如果显示Disabled说明selinux已经关闭

配置机器主机名

在192.168.40.186上执行如下:

hostnamectl set-hostname xianchaomaster2 && bash

配置主机hosts文件,相互之间通过主机名互相访问

修改每台机器的/etc/hosts文件,文件最后增加如下内容:

192.168.40.180   xianchaomaster1 

192.168.40.181   xianchaonode1 

192.168.40.186   xianchaomaster2

修改之后的文件如下:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.40.180   xianchaomaster1

192.168.40.181   xianchaonode1 

192.168.40.186   xianchaomaster2

 配置xianchaomaster1登录xianchaomaster2免密码登录

配置xianchaomaster1到其他机器免密登录

把本地生成的密钥文件和私钥文件拷贝到远程主机

[root@xianchaomaster1 ~]# ssh-copy-id xianchaomaster2

关闭交换分区swap,提升性能

[root@xianchaomaster2~]# swapoff -a

[root@xianchaomaster2 ~]# vim /etc/fstab

#/dev/mapper/centos-swap swap      swap    defaults        0 0

修改机器内核参数

[root@xianchaomaster2 ~]# modprobe br_netfilter

[root@xianchaomaster2~]# 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

[root@ xianchaomaster2~]# sysctl -p /etc/sysctl.d/k8s.conf

关闭firewalld防火墙

[root@xianchaomaster2~]# systemctl stop firewalld ; systemctl disable firewalld

配置阿里云的repo源

[root@xianchaomaster2 ~]#yum install yum-utils -y

[root@xianchaomaster2 ~]# yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

配置安装k8s组件需要的阿里云的repo源

[root@xianchaomaster2 ~]#cat >  /etc/yum.repos.d/kubernetes.repo <<EOF

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

gpgcheck=0

EOF

配置时间同步

在xianchaomaster2上执行如下:

#安装ntpdate命令

[root@xianchaomaster2 ~]#yum install ntpdate -y

#跟网络时间做同步

[root@xianchaomaster2 ~]#ntpdate cn.pool.ntp.org

#把时间同步做成计划任务

[root@xianchaomaster2 ~]#crontab -e

* * * * * /usr/sbin/ntpdate   cn.pool.ntp.org

安装containerd

[root@xianchaomaster2 ~]#yum install  containerd.io-1.6.6 -y

接下来生成 containerd 的配置文件:

[root@xianchaomaster2 ~]#mkdir -p /etc/containerd

[root@xianchaomaster2 ~]#containerd config default > /etc/containerd/config.toml

修改配置文件:

打开/etc/containerd/config.toml

把SystemdCgroup = false修改成SystemdCgroup = true

把sandbox_image = \”k8s.gcr.io/pause:3.6\”修改成sandbox_image=\”registry.aliyuncs.com/google_containers/pause:3.7\”

配置 containerd 开机启动,并启动 containerd

[root@xianchaomaster2 ~]#systemctl enable containerd  –now

修改/etc/crictl.yaml文件

[root@xianchaomaster2 ~]#cat > /etc/crictl.yaml <<EOF

runtime-endpoint: unix:///run/containerd/containerd.sock

image-endpoint: unix:///run/containerd/containerd.sock

timeout: 10

debug: false

EOF

[root@xianchaomaster2 ~]#systemctl restart  containerd

配置containerd镜像加速器,按照以下方法配置:

编辑vim /etc/containerd/config.toml文件

找到config_path = \”\”,修改成如下目录:

config_path = \”/etc/containerd/certs.d\”

#保存退出

mkdir /etc/containerd/certs.d/docker.io/ -p

vim /etc/containerd/certs.d/docker.io/hosts.toml

#写入如下内容:

[host.\”https://vh3bm52y.mirror.aliyuncs.com\”,host.\”https://registry.docker-cn.com\”]

  capabilities = [\”pull\”,\”push\”]

重启containerd:

systemctl restart containerd

备注:docker也要安装,docker跟containerd不冲突,安装docker是为了能基于dockerfile构建镜像

[root@xianchaomaster2 ~]#yum install  docker-ce  -y

[root@xianchaomaster2 ~]#systemctl enable docker –now

配置docker镜像加速器

vim /etc/docker/daemon.json

写入如下内容:

{

 \”registry-mirrors\”:[\”https://vh3bm52y.mirror.aliyuncs.com\”,\”https://registry.docker-cn.com\”,\”https://docker.mirrors.ustc.edu.cn\”,\”https://dockerhub.azk8s.cn\”,\”http://hub-mirror.c.163.com\”]

}

重启docker:

systemctl restart docker

安装初始化k8s需要的软件包

[root@xianchaomaster2 ~]#yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0

[root@xianchaomaster2 ~]# systemctl enable kubelet

注:每个软件包的作用

Kubeadm:  kubeadm是一个工具,用来初始化k8s集群的

kubelet:   安装在集群所有节点上,用于启动Pod的,kubeadm安装k8s,k8s控制节点和工作节点的组件,都是基于pod运行的,只要pod启动,就需要kubelet

kubectl:   通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

把xianchaomaster2加入到K8s集群:

#把xianchaomaster1节点的证书拷贝到xianchaomaster2上

在xianchaomaster2创建证书存放目录:

[root@xianchaomaster2 ~]# cd /root && mkdir -p /etc/kubernetes/pki/etcd &&mkdir -p ~/.kube/

#把xianchaomaster1节点的证书拷贝到xianchaomaster2上:

scp /etc/kubernetes/pki/ca.crt xianchaomaster2:/etc/kubernetes/pki/

scp /etc/kubernetes/pki/ca.key xianchaomaster2:/etc/kubernetes/pki/

scp /etc/kubernetes/pki/sa.key xianchaomaster2:/etc/kubernetes/pki/

scp /etc/kubernetes/pki/sa.pub xianchaomaster2:/etc/kubernetes/pki/

scp /etc/kubernetes/pki/front-proxy-ca.crt xianchaomaster2:/etc/kubernetes/pki/

scp /etc/kubernetes/pki/front-proxy-ca.key xianchaomaster2:/etc/kubernetes/pki/

scp /etc/kubernetes/pki/etcd/ca.crt xianchaomaster2:/etc/kubernetes/pki/etcd/

scp /etc/kubernetes/pki/etcd/ca.key xianchaomaster2:/etc/kubernetes/pki/etcd/

#证书拷贝之后在xianchaomaster2上执行如下命令,大家复制自己的,这样就可以把xianchaomaster2和加入到集群,成为控制节点:

在xianchaomaster2上执行:

把安装calico需要的镜像calico.tar.gz传到xianchaomaster1和xianchaonode1节点,手动解压:

[root@xianchaomaster2 ~]# ctr -n=k8s.io images import k8s_1.26.0.tar.gz

[root@xianchaomaster2 ~]# ctr -n=k8s.io images import calico.tar.gz

检查 kubeadm-config ConfigMap 是否正确配置了 controlPlaneEndpoint。可以使用 kubectl 命令获取 kubeadm-config ConfigMap 的信息:

[root@xianchaomaster1 ~]# kubectl -n kube-system edit cm kubeadm-config -o yaml

添加如下字段:

controlPlaneEndpoint: \”192.168.40.180:6443\”

重启kubelet:

[root@xianchaomaster1 ~]# systemctl restart kubelet

在xianchaomaster1上查看加入节点的命令:

[root@xianchaomaster1 ~]# kubeadm token create –print-join-command

显示如下:

kubeadm join 192.168.40.180:6443 –token zwzcks.u4jd8lj56wpckcwv \\

    –discovery-token-ca-cert-hash sha256:1ba1b274090feecfef58eddc2a6f45590299c1d0624618f1f429b18a064cb728

[root@xianchaomaster2 ~]#kubeadm join 192.168.40.180:6443 –token zwzcks.u4jd8lj56wpckcwv \\

    –discovery-token-ca-cert-hash sha256:1ba1b274090feecfef58eddc2a6f45590299c1d0624618f1f429b18a064cb728 \\

    –control-plane –ignore-preflight-errors=SystemVerification

[root@xianchaomaster2 ~]# mkdir -p $HOME/.kube

[root@xianchaomaster2 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@xianchaomaster2 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

在xianchaomaster1上查看集群状况:

xianchaomaster1      Ready   control-plane,master      58m   v1.26.0

xianchaonode1        Ready   <none>                    58s   v1.26.0

xianchaomaster2      Ready   control-plane,master      58s   v1.26.0

    

上面可以看到xianchaomaster2已经加入到集群了
#以上关于k8s Kubernetes 1.26 部署安装示例 双控制(双master)节点的相关内容来源网络仅供参考,相关信息请以官方公告为准!

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92544.html

(0)
CSDN的头像CSDN
上一篇 2024年6月27日
下一篇 2024年6月27日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注