《Kubernetes部署篇:基于Kylin V10+ARM架构CPU使用containerd部署K8S 1.26.15集群(一主多从)》

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战

1、在当前实验环境中安装K8S1.25.14版本,出现了一个问题,就是在pod中访问百度网站,大概时间有10s多,这个时间太长了,尝试了各种办法,都解决不了,后面尝试安装了了1.26.15版本就没这个问题,很神奇,希望这个问题能帮到一些朋友,如果你也有遇到这个问题并有解决方案,可以告诉我,本人不胜感激!!!

2、此外在安装K8S1.26.15版本后,安装完calico v3.26.4后,测试dns,无法ping通百度,将control-plane节点和worker节点主机进行重启,就可以ping通,这个问题困扰了我很久,虽然重启解决了,但是不明白为什么?如果你能知道,并告知我,本人将非常感谢!


一、架构图

如下图所示:
在这里插入图片描述


二、环境信息

1、资源下载


2、部署规划

主机名 K8S版本 系统版本 CPU架构 内核版本I IP地址 备注
k8s-master-42 1.26.15 Kylin Linux Advanced Server V10 aarch64 4.19.90-17.5.ky10.aarch64 172.18.1.42 control-plane节点
k8s-worker-67 1.26.15 Kylin Linux Advanced Server V10 aarch64 4.19.90-17.5.ky10.aarch64 172.18.1.67 worker节点
k8s-worker-97 1.26.15 Kylin Linux Advanced Server V10 aarch64 4.19.90-17.5.ky10.aarch64 172.18.1.97 worker节点

3、集群网段

宿主机 集群Pod网段 集群Service网段
172.18.1.0/24 10.48.0.0/16 10.96.0.0/16

4、基础软件版本

软件 版本 安装方式
kubeadm 1.26.15 二进制
kubectl 1.26.15 二进制
kubelet 1.26.15 二进制
cri-containerd-cni 1.7.2 二进制
ipvsadm 1.29 yum
ipset 7.3 yum
conntrack 1.4.4 yum
socat 1.7.3.2 yum
ebtables 2.0.10 yum
sysstat 12.1.6 yum

说明
1、cri-containerd-cni包包含containerd、runc、cni打工插件。安装containerd,需要同时安装runc及cni网络插件。 containerd不能直接操作容器,需要通过runc来运行容器。默认Containerd管理的容器仅有lo网络(无法访问容器之外的网络), 如果需要访问容器之外的网络则需要安装CNI网络插件。CNI(Container Network Interface) 是一套容器网络接口规范,用于为容器分配ip地址,通过CNI插件Containerd管理的容器可以访问容器之外的网络。

2、ipvsadm:这是一个用于管理Linux内核中的IP虚拟服务器(IPVS)的工具。它允许您配置和管理负载均衡、网络地址转换(NAT)和透明代理等功能。

3、ipset:这是一个用于管理Linux内核中的IP集合的工具。它允许您创建和管理IP地址、IP地址范围和端口号的集合,以便在防火墙规则中使用。

4、conntrack:这是一个用于连接跟踪的内核模块和工具。它允许您跟踪网络连接的状态和信息,如源IP地址、目标IP地址、端口号等。

5、socat(网络工具):这是一个用于在Linux系统中建立各种类型网络连接的工具。在Kubernetes网络中,socat可以 用于创建端口转发、代理和转发等网络连接。

6、ebtables(以太网桥规则管理工具):这是一个用于在Linux系统中管理以太网桥规则的工具。在Kubernetes中,ebtables 用于在网络分区中实现容器之间的隔离和通信。

7、sysstat:这是一个用于系统性能监控和报告的工具集。它包括一些实用程序,如sar、iostat和mpstat,用于收集和显示系统资源使用情况的统计信息。


5、K8S镜像

K8S镜像 calico镜像
registry.k8s.io/kube-apiserver:v1.26.15 docker.io/calico/cni:v3.26.4
registry.k8s.io/kube-controller-manager:v1.26.15 docker.io/calico/kube-controllers:v3.26.4
registry.k8s.io/kube-scheduler:v1.26.15 docker.io/calico/node:v3.26.4
registry.k8s.io/kube-proxy:v1.26.15 -
registry.k8s.io/pause:3.9 -
registry.k8s.io/coredns/coredns:v1.9.3 -
registry.k8s.io/etcd:3.5.10-0 -

6、k8s版本与calico版本对应关系

calico版本 calico yml文件下载 支持K8S版本
v3.24.x calico.yml v1.22、v1.23、v1.24、v1.25
v3.25.x calico.yml v1.23、v1.24、v1.25、v1.26、v1.27、v1.28
v3.26.x calico.yml v1.24、v1.25、v1.26、v1.27、v1.28
v3.27.x calico.yml v1.27、v1.28、v1.29

三、安装和配置先决条件

3.1、设置主机名

说明:分别在对应的节点IP上设置主机名。

[root@ecs-90c2-0001 ~]# hostnamectl set-hostname k8s-master-42 && bash
[root@ecs-90c2-0002 ~]# hostnamectl set-hostname k8s-worker-67 && bash
[root@ecs-90c2-0003 ~]# hostnamectl set-hostname k8s-worker-97 && bash

3.2、配置主机hosts

说明:以下操作无论是control-plane节点和worker节点均需要执行。

[root@k8s-master-42 ~]# cat >> /etc/hosts <<EOF
172.18.1.42 k8s-master-42
172.18.1.67 k8s-worker-67
172.18.1.97 k8s-worker-97
EOF

3.3、关闭防火墙

说明:以下操作无论是control-plane节点和worker节点均需要执行。

[root@k8s-master-42 ~]# systemctl stop firewalld && systemctl disable firewalld

3.4、设置ulimit

说明:以下操作无论是control-plane节点和worker节点均需要执行。

1、检查ulimit

[root@k8s-master-42 ~]# ulimit -SHn 65535
[root@k8s-master-42 ~]# ulimit -a

2、设置ulimit, 如果已经设置,则忽略,如果未设置请按照如下要求设置。

[root@k8s-master-42 ~]# vim /etc/security/limits.conf
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
root soft nproc 65535
root hard nproc 65535
* soft nproc 65535
* hard nproc 65535

3.5、关闭selinux

说明:以下操作无论是control-plane节点和worker节点均需要执行。

# 1、临时关闭
[root@k8s-master-42 ~]# setenforce 0
# 2、永久关闭,需重启服务器
[root@k8s-master-42 ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
[root@k8s-master-42 ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux

3.6、关闭swap分区

说明:以下操作无论是control-plane节点和worker节点均需要执行。

[root@k8s-master-42 ~]# swapoff -a && sed -i 's/.*swap.*/#&/' /etc/fstab

3.7、时间时区同步

说明:以下操作无论是control-plane节点和worker节点均需要执行。

1、设置时区为Asia/Shanghai,如果已经是则请忽略

# 以 root 用户运行以下命令可以修改当前时区,如修改为上海
[root@k8s-master-42 ~]# timedatectl set-timezone Asia/Shanghai
# 显示当前时区
[root@k8s-master-42 ~]# timedatectl show
Timezone=Asia/Shanghai

2、设置时间与北京时间同步,如果已经是则请忽略



3.8、修改内核参数

说明:以下操作无论是control-plane节点和worker节点均需要执行。

1、创建名为/etc/modules-load.d/containerd.conf 的文件,并且将 overlay和br_netfilter写入。这两个模块overlay 和br_netfilter是containerd运行所需的内核模块

[root@k8s-master-42 ~]# modprobe overlay
[root@k8s-master-42 ~]# modprobe br_netfilter
[root@k8s-master-42 ~]# cat <<EOF | tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
# 通过运行以下指令确认br_netfilter和overlay模块被加载
[root@k8s-master-42 ~]# lsmod | grep br_netfilter
[root@k8s-master-42 ~]# lsmod | grep overlay

2、设置 必须的内核参数,包括网络转发、桥接网络 、IPv6 数据包的iptables过滤功能

[root@k8s-master-42 ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 开启ip_forward
[root@k8s-master-42 ~]# sed -i 's/net.ipv4.ip_forward=0/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
# 应用sysctl参数而不重新启动
[root@k8s-master-42 ~]# sysctl --system

3.9、启用IPVS模式

说明:以下操作无论是control-plane节点和worker节点均需要执行。

1、安装IPVS工具及依赖

[root@k8s-master-42 ~]# yum install ipvsadm ipset sysstat socat conntrack ebtables  -y

2、确保安装了IPVS所需的内核模块(注:对于 Linux 内核 4.19 及更高版本,请使用 nf_conntrack 代替 nf_conntrack_ipv4)。

[root@k8s-master-42 ~]# uname -r
4.19.90-17.5.ky10.aarch64

[root@k8s-master-42 ~]# cat > /etc/profile.d/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
[root@k8s-master-42 ~]# chmod 755 /etc/profile.d/ipvs.modules && bash /etc/profile.d/ipvs.modules
[root@k8s-master-42 ~]# lsmod | grep -e ip_vs -e nf_conntrack

四、安装containerd容器引擎

说明:以下操作无论是control-plane节点和worker节点均需要执行。

1、升级libseccomp

说明:经过多次试验,安装k8s1.26.15版本时,如果libseccomp版本为2.4.1,则会报错unable to retrieve OCI runtime error。

[root@k8s-master-42 ~]# rpm -qa | grep libseccomp
libseccomp-2.4.1-3.ky10.aarch64
[root@k8s-master-42 ~]# rpm -e `rpm -qa | grep libseccomp` --nodeps
[root@k8s-master-42 ~]# yum install gperf -y
[root@k8s-master-42 ~]# wget https://github.com/seccomp/libseccomp/releases/download/v2.5.4/libseccomp-2.5.4.tar.gz
[root@k8s-master-42 ~]# tar axf libseccomp-2.5.4.tar.gz && cd libseccomp-2.5.4
[root@k8s-master-42 ~]# ./configure && make && make install
[root@k8s-master-42 libseccomp-2.5.4]# find / -name libseccomp.so.2
/usr/local/lib/libseccomp.so.2
/root/libseccomp-2.5.4/src/.libs/libseccomp.so.2
[root@k8s-master-42 ~]# ln -s /usr/local/lib/libseccomp.so.2 /usr/lib64/libseccomp.so.2

2、安装软件包

[root@k8s-master-42 ~]# wget https://github.com/containerd/containerd/releases/download/v1.7.2/cri-containerd-cni-1.7.2-linux-arm64.tar.gz
[root@k8s-master-42 ~]# tar axf cri-containerd-cni-1.7.2-linux-arm64.tar.gz -C /

3、修改配置文件

[root@k8s-master-42 ~]# mkdir -p /etc/containerd&& containerd config default > /etc/containerd/config.toml
[root@k8s-master-42 ~]# sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
[root@k8s-master-42 ~]# sed -i 's#sandbox_image = "registry.k8s.io/pause:3.8"#sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9"#g' /etc/containerd/config.toml

4、网络插件CNI配置文件

[root@k8s-master-42 ~]#  rm -f /etc/cni/net.d/10-containerd-net.conflist 
[root@k8s-master-42 ~]#  cat <<EOF | sudo tee /etc/cni/net.d/cni-default.conf 
{
    "name": "mynet",
    "cniVersion": "0.3.1",
    "type": "bridge",
    "bridge": "mynet0",
    "isDefaultGateway": true,
    "ipMasq": true,
    "hairpinMode": true,
    "ipam": {
        "type": "host-local",
        "subnet": "10.48.0.0/16"
    }
}
EOF

5、重启containerd服务并设置开机自启

[root@k8s-master-42 ~]# systemctl daemon-reload && systemctl restart containerd && systemctl enable containerd

如下图所示:
在这里插入图片描述


五、安装kubelet、kubeadm和kubectl

说明:以下操作无论是control-plane节点和worker节点均需要执行。

5.1、方法一(yum源)

1、编辑镜像源文件,加入阿里云k8s镜像源配置

[root@k8s-master-42 ~]# cat <<EOF | sudo tee  /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2、安装指定版本

[root@k8s-master-42 ~]# yum --showduplicates list kubeadm kubectl kubelet
[root@k8s-master-42 ~]# yum install -y kubelet-1.26.9 kubeadm-1.26.9 kubectl-1.26.9

3、设置kubectl开机自启

[root@k8s-master-42 ~]# systemctl enable kubelet

注意:由于在Kylin Linux Advanced Server V10系统的kubernetes源中,使用yum最高只能安装1.26大版本中的1.26.9小版本,但是我安装的是1.26.15版本,所以当前环境中未采用此方法。


5.2、方法二(二进制)

说明:以下操作无论是control-plane节点和worker节点均需要执行。

1、准备kubeadm、kubelet、kubectl二进制文件

# 方法一
[root@k8s-master-42 ~]# wget -P /usr/bin/ https://dl.k8s.io/v1.26.15/bin/linux/arm64/kubeadm
[root@k8s-master-42 ~]# wget -P /usr/bin/ https://dl.k8s.io/v1.26.15/bin/linux/arm64/kubelet
[root@k8s-master-42 ~]# wget -P /usr/bin/ https://dl.k8s.io/v1.26.15/bin/linux/arm64/kubectl
# 方法二
[root@k8s-master-42 ~]# wget https://dl.k8s.io/v1.26.15/kubernetes-client-linux-arm64.tar.gz
[root@k8s-master-42 ~]# tar axf kubernetes-client-linux-arm64.tar.gz
[root@k8s-master-42 ~]# cp kubernetes/node/bin/{kubeadm,kubelet,kubectl}  /usr/bin

2、准备kubelet.service文件

[root@k8s-master-42 ~]# wget https://raw.githubusercontent.com/kubernetes/release/v0.4.0/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service
[root@k8s-master-42 ~]# cp kubelet.service /usr/lib/systemd/system/kubelet.service

3、准备10-kubeadm.conf文件

[root@k8s-master-42 ~]# wget https://raw.githubusercontent.com/kubernetes/release/v0.4.0/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf
[root@k8s-master-42 ~]# mkdir -p /usr/lib/systemd/system/kubelet.service.d
[root@k8s-master-42 ~]# cp 10-kubeadm.conf /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

4、设置kubectl开机自启

[root@k8s-master-42 ~]# systemctl enable kubelet

六、k8s镜像下载

说明:以下操作无论是control-plane节点和worker节点均需要执行。

1、查看镜像

[root@k8s-master-42 ~]# kubeadm config images list --kubernetes-version=v1.26.15
registry.k8s.io/kube-apiserver:v1.26.15
registry.k8s.io/kube-controller-manager:v1.26.15
registry.k8s.io/kube-scheduler:v1.26.15
registry.k8s.io/kube-proxy:v1.26.15
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.10-0
registry.k8s.io/coredns/coredns:v1.9.3

2、下载镜像

#!/bin/bash
k8s_version=v1.26.15
pause_version=3.9
etcd_version=3.5.10-0
coredns_version=v1.9.3
registry_address=registry.cn-hangzhou.aliyuncs.com/google_containers
ctr -n k8s.io image pull --platform linux/arm64 ${registry_address}/kube-apiserver:${k8s_version}
ctr -n k8s.io image pull --platform linux/arm64 ${registry_address}/kube-controller-manager:${k8s_version}
ctr -n k8s.io image pull --platform linux/arm64 ${registry_address}/kube-scheduler:${k8s_version}
ctr -n k8s.io image pull --platform linux/arm64 ${registry_address}/kube-proxy:${k8s_version}
ctr -n k8s.io image pull --platform linux/arm64 ${registry_address}/pause:${pause_version}
ctr -n k8s.io image pull --platform linux/arm64 ${registry_address}/etcd:${etcd_version}
ctr -n k8s.io image pull --platform linux/arm64 ${registry_address}/coredns:${coredns_version}

3、导出镜像

#!/bin/bash
k8s_version=v1.26.15
pause_version=3.9
etcd_version=3.5.10-0
coredns_version=v1.9.3
registry_address=registry.cn-hangzhou.aliyuncs.com/google_containers
ctr -n k8s.io image export --platform linux/arm64 \
kube-apiserver-${k8s_version}.tar.gz ${registry_address}/kube-apiserver:${k8s_version}
ctr -n k8s.io image export --platform linux/arm64 \
kube-controller-manager-${k8s_version}.tar.gz ${registry_address}/kube-controller-manager:${k8s_version}
ctr -n k8s.io image export --platform linux/arm64 \
kube-scheduler-${k8s_version}.tar.gz ${registry_address}/kube-scheduler:${k8s_version}
ctr -n k8s.io image export --platform linux/arm64 \
kube-proxy-${k8s_version}.tar.gz ${registry_address}/kube-proxy:${k8s_version}
ctr -n k8s.io image export --platform linux/arm64 \
pause-${pause_version}.tar.gz ${registry_address}/pause:${pause_version}
ctr -n k8s.io image export --platform linux/arm64 \
etcd-${etcd_version}.tar.gz ${registry_address}/etcd:${etcd_version}
ctr -n k8s.io image export --platform linux/arm64 \
coredns-${coredns_version}.tar.gz ${registry_address}/coredns:${coredns_version}

4、导入镜像

#!/bin/bash
k8s_version=v1.26.15
pause_version=3.9
etcd_version=3.5.10-0
coredns_version=v1.9.3
ctr -n k8s.io image import --platform linux/arm64 pause-${pause_version}.tar.gz
ctr -n k8s.io image import --platform linux/arm64 kube-apiserver-${k8s_version}.tar.gz
ctr -n k8s.io image import --platform linux/arm64 kube-controller-manager-${k8s_version}.tar.gz
ctr -n k8s.io image import --platform linux/arm64 kube-scheduler-${k8s_version}.tar.gz
ctr -n k8s.io image import --platform linux/arm64 kube-proxy-${k8s_version}.tar.gz
ctr -n k8s.io image import --platform linux/arm64 etcd-${etcd_version}.tar.gz
ctr -n k8s.io image import --platform linux/arm64 coredns-${coredns_version}.tar.gz

说明:由于网络问题,国内服务器无法访问registry.k8s.io镜像仓库地址,建议使用国内阿里云的镜像仓库下载k8s镜像。如果你的是专网环境,请找一台能访问阿里云镜像仓库的服务器下载然后打包成tar.gz格式,上传到要部署的专网服务器,通过ctr image import命令导入镜像即可。


七、calico镜像及yaml文件下载

calico 3.26版本对应K8S版本,如下图所示:

# 支持系统
RedHat Linux 7
CentOS 7
Flatcar Container Linux
Fedora CoreOS
Ubuntu 18.04
Debian 8
# 支持k8s版本
v1.24
v1.25
v1.26
v1.27
v1.28

1、calico.yml文件下载

说明:以下操作只需要在control-plane节点执行。

[root@k8s-master-42 ~]#  wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/calico.yaml
[root@k8s-master-42 ~]#  grep "image:" calico.yaml | uniq -c
      2           image: docker.io/calico/cni:v3.26.4
      2           image: docker.io/calico/node:v3.26.4
      1           image: docker.io/calico/kube-controllers:v3.26.4

2、镜像下载

说明:以下操作无论是control-plane节点和worker节点均需要执行。

#!/bin/bash
calico_version=v3.26.4
ctr -n k8s.io image pull --platform linux/arm64 docker.io/calico/cni:${calico_version}
ctr -n k8s.io image pull --platform linux/arm64 docker.io/calico/node:${calico_version}
ctr -n k8s.io image pull --platform linux/arm64 docker.io/calico/kube-controllers:${calico_version}

3、镜像导出

#!/bin/bash
calico_version=v3.26.4
ctr -n k8s.io image export --platform linux/arm64 \
calico-cni-${calico_version}.tar.gz docker.io/calico/cni:${calico_version}
ctr -n k8s.io image export --platform linux/arm64 \
calico-node-${calico_version}.tar.gz docker.io/calico/node:${calico_version}
ctr -n k8s.io image export --platform linux/arm64 \
calico-kube-controllers-${calico_version}.tar.gz docker.io/calico/kube-controllers:${calico_version}

4、镜像导入

#!/bin/bash
calico_version=v3.26.4
ctr -n k8s.io image import --platform linux/arm64 calico-cni-${calico_version}.tar.gz
ctr -n k8s.io image import --platform linux/arm64 calico-node-${calico_version}.tar.gz
ctr -n k8s.io image import --platform linux/arm64 calico-kube-controllers-${calico_version}.tar.gz

八、安装control-plane节点

8.1、control-plane节点初始化集群

说明:以下操作只需要在control-plane节点执行。

1、生成默认kubeadm初始化config文件

[root@k8s-master-42 ~]# kubeadm config print init-defaults > kubeadm-config.yaml

2、修改kubeadm默认config文件

[root@k8s-master-42 ~]# vim kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: "172.18.1.42"
  bindPort: 6443
nodeRegistration:  
  criSocket: unix:///run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: k8s-master-42
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
  - effect: NoSchedule
    key: node-role.kubernetes.io/control-plane
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: 1.26.15
controlPlaneEndpoint: "172.18.1.42:6443"
networking:
  dnsDomain: cluster.local
  podSubnet: 10.48.0.0/16
  serviceSubnet: 10.96.0.0/16
imageRepository: "registry.cn-hangzhou.aliyuncs.com/google_containers"  
apiServer:
  extraArgs:
    service-node-port-range: 30000-36000
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd

3、使用kubeadm init初始化集群

[root@k8s-master-42 ~]# kubeadm init --config=kubeadm-config.yaml

如下图所示:
在这里插入图片描述

4、对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理

[root@k8s-master-42 ~]# mkdir -p $HOME/.kube
[root@k8s-master-42 ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master-42 ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s-master-42 ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
[root@k8s-master-42 ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
[root@k8s-master-42 ~]# source /etc/profile

8.2、启动kubectl自动补全功能

[root@k8s-master-42 ~]# yum install bash-completion -y
[root@k8s-master-42 ~]# source /usr/share/bash-completion/bash_completion
[root@k8s-master-42 ~]# echo 'source <(kubectl completion bash)' >>~/.bashrc
[root@k8s-master-42 ~]# source ~/.bashrc

九、安装worker节点

说明:以下操作仅在worker节点执行。

1、将worker节点加入k8s集群

#注意:kubeamd join命令的token只有24h,24h就过期,需要执行kubeadm token create --print-join-command重新生成。
[root@k8s-worker-67 ~]# kubeadm join 172.18.1.42:6443 --token q1d0eg.wg8ia4jnm7y2898l \
>         --discovery-token-ca-cert-hash sha256:9811e539ddee7517b9e546270e95bed00979c4504842f56f18f40e688181e2dc

如下图所示:
在这里插入图片描述


十、部署calico网络插件

说明:以下操作只需要在control-plane节点执行。

1、修改calico.yaml文件,增加IP_AUTODETECTION_METHOD字段

            - name: CALICO_NETWORKING_BACKEND
              valueFrom:
                configMapKeyRef:
                  name: calico-config
                  key: calico_backend
            - name: IP_AUTODETECTION_METHOD     # 增加内容
              value: can-reach=172.18.1.42      # 增加内容
            # Cluster type to identify the deployment type
            - name: CLUSTER_TYPE
              value: "k8s,bgp"

说明:官方提供的yaml文件中,ip识别策略(IPDETECTMETHOD)没有配置,即默认为first-found,这会导致一个网络异常的ip作为nodeIP被注册,从而影响node-to-node mesh 。我们可以修改成 can-reach 或者 interface 的策略,尝试连接某一个Ready的node的IP,以此选择出正确的IP。

2、修改calico.yaml文件,修改CALICO_IPV4POOL_CIDR字段

            # The default IPv4 pool to create on startup if none exists. Pod IPs will be
            # chosen from this range. Changing this value after installation will have
            # no effect. This should fall within `--cluster-cidr`.
            - name: CALICO_IPV4POOL_CIDR
              value: "10.48.0.0/16"

3、执行calico.yaml文件

[root@k8s-master-42 ~]# kubectl apply -f calico.yaml 

4、部署完成后,等待一段时间,重启服务器

说明:以下操作无论是control-plane节点和worker节点均需要执行。

[root@k8s-master-42 ~]# reboot

注意:经测试,部署完成后等待一段时间calico日志恢复正常,然后需重启服务器,否则会出现在pod中无法ping通百度。


十一、K8S集群测试

11.1、检查集群状态

说明:以下操作只需要在control-plane节点执行。

[root@k8s-master-42 ~]# kubectl get nodes -o wide
[root@k8s-master-42 ~]# kubectl get cs
[root@k8s-master-42 ~]# kubectl get pods -A -o wide
[root@k8s-master-42 ~]# kubectl get svc -A  -o wide

如下图所示:
在这里插入图片描述


11.2、DNS测试

说明:以下操作只需要在control-plane节点执行。

[root@k8s-master-42 ~]# kubectl run busybox --image busybox:1.34 --restart=Never --rm -it busybox -- sh
If you don't see a command prompt, try pressing enter.
/ # cat /etc/resolv.conf 
search default.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.96.0.10
options ndots:5
/ # nslookup default.svc.cluster.local
Server:         10.96.0.10
Address:        10.96.0.10:53

注意:如果部署完之后发现无法解析kubernetes.default和ping通百度网站,可以尝试重启K8S集群节点所有节点主机。


11.3、功能性测试

说明:以下操作只需要在control-plane节点执行。

1、部署一个简单的Nginx服务(必须)

vim nginx.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              protocol: TCP
              containerPort: 80
          resources:
            limits:
              cpu: "1.0"
              memory: 512Mi
            requests:
              cpu: "0.5"
              memory: 128Mi
---
apiVersion: v1
kind: Service
metadata:
  annotations:
  name: nginx-test-service
spec:
  ports:
    - port: 80
      targetPort: 80
      nodePort: 32001
      protocol: TCP
  selector:
    app: nginx
  sessionAffinity: None
  type: NodePort

2、测试Nginx服务是否正常,如下所示:
在这里插入图片描述


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/544031.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【opencv】示例-stiching_detailed.cpp 使用OpenCV进行图像拼接的整体流程

#include <iostream> // 引入输入输出流库 #include <fstream> // 引入文件流库&#xff0c;用于文件输入输出 #include <string> // 引入字符串库 #include "opencv2/opencv_modules.hpp" // 引入OpenCV模块 #include <opencv2/core/utility.h…

【微信小程序——开发DAY4(黑马程序员课程)】

学习目标 自定义小程序组件自定义组件&#xff08;1.&#xff09;创建自定义组件文件夹&#xff08;2.&#xff09;引用自定义组件&#xff08;3.&#xff09;组件和页面的区别&#xff08;4.&#xff09;自定义组件的隔离性——自定义组件不影响小程序的样式——自定义组件也只…

用通俗易懂的方式讲解:大模型高级 RAG 检索策略之递归检索

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 基于大模…

LinkSage:基于 GNN 的 Pinterest理解

目录 一、背景二、动机和介绍三、技术设计3.1 数据3.2 图3.3 特征3.4 型 四、主要创新4.1 多维表示4.2 XSage的兼容性4.3 增量服务 五、离线结果5.1 召回5.2 分数分布5.3 峰度 六、在线结果6.1 面向用户的表面6.2 Ads 七、总结 LinkSage&#xff1a;基于图神经网络的Pinterest…

微服务之LoadBalancer负载均衡服务调用

一、概述 1.1什么是负载均衡 LB&#xff0c;既负载均衡&#xff08;Load Balancer&#xff09;,是高并发、高可用系统必不可少的关键组件&#xff0c;其目标是尽力将网络流量平均分发到多个服务器上&#xff0c;以提高系统整体的响应速度和可用性。 负载均衡的主要作用 高并发…

IDEA阅读Java源码 SimpleDateFormat

IDEA阅读Java源码 SimpleDateFormat 文章目录 IDEA阅读Java源码 SimpleDateFormat一、阅读的代码二、IDEA操作2.1 标记断点2.2 启用Debug2.3 按键区分2.4 强制进入方法2.5 进入指定方法2.6 多方法进入指定方法2.7 进入正确的方法2.8 真正的方法体实现 三、SimpleDateFormat源码…

网络篇08 | 运输层 tcp

网络篇08 | 运输层 tcp 01 简介1&#xff09;运输层的作用2&#xff09;与应用层的关系3&#xff09;两个协议的应用场景4&#xff09;传输的数据单位 02 功能特性1&#xff09;面向连接2&#xff09;停止等待协议3&#xff09;流水线传输协议4&#xff09;滑动窗口机制5&#…

011、Python+fastapi,第一个后台管理项目走向第11步:建立python+fastapi项目,简单测试一下

一、说明 本文章就是记录自己的学习过程&#xff0c;如果有用您可以参考&#xff0c;没用你就略过&#xff0c;没有好与不好之分&#xff0c;今天主要是参考了gitee上的一些项目&#xff0c;一步一步的往后i建立 对于学习来说&#xff0c;如果您有java c等经验&#xff0c;py…

Redis的哨兵机制

引入&#xff1a; 主从复制最大的问题还是在主节点上&#xff0c;主节点挂了&#xff0c;从节点就迷茫了&#xff0c;虽然能够提供读操作&#xff0c;但是从节点不能自动生成主节点&#xff0c;不能替换原有主节点对应的角色&#xff1b;此时&#xff0c;就需要程序员/运维手工…

绿联HDMI延长器40265使用AG7120芯片放大器方案

HDMI延长器和放大器 延长器&#xff1a;主要用于HDMI线的延长&#xff0c;有HDMI对接头方式延长&#xff0c;或HDMI公头加HDMI母头的HDMI线进行延长&#xff0c;或通过网线方式延长&#xff0c;早期为双网线&#xff0c;目前已发展为单网线&#xff0c;需要注意的是&#xff0…

L45 【哈工大_操作系统】操作系统接口 系统调用实现

L4 操作系统接口 本节比较简单&#xff0c;故与第五节课程笔记一起发布。本节主要是研究 上层应用 是怎么穿过边界进入 操作系统。 接口&#xff1a;操作系统提供的重要函数/指令( system call )&#xff0c;用来连接硬件&#xff0c;所以OS接口就是系统调用POSIX&#xff08;…

Res2Net网络

Res2Net网络 摘要Abstract1. Res2Net网络1.1 文献摘要1.2 背景1.3 创新点1.4 网络结构1.5 实验1.5.1 在ImageNet数据集上进行实验1.5.2 在CIFAR数据集上进行实验 2. Res2Net代码实现3. 总结 摘要 Res2Net是一种神经网络架构&#xff0c;旨在改善类似ResNet的网络在计算机视觉任…

vscode开发 vue3+ts 的 uni-app 微信小程序项目

创建uni-app项目&#xff1a; # 创建用ts开发的uni-app npx degit dcloudio/uni-preset-vue#vite-ts 项目名称 # 创建用js开发的uni-app npx degit dcloudio/uni-preset-vue#vite 项目名称VS Code 配置 为什么选择 VS Code &#xff1f; HbuilderX 对 TS 类型支持暂不完善VS…

unity记一下如何播放动画

我使用的版本是2022.3.14fc 展开你的模型树&#xff0c;是会出现这个三角形的东西的 然后在资源面板创建一个animation controller 进去之后&#xff0c;把三角形拖进去&#xff0c;就会出现一个动画&#xff0c;然后点击他 在左侧给他创建这么个状态名字&#xff0c;类型…

AskManyAI:一个GPT、Claude、Gemini、Kimi等顶级AI的决斗场

一直以来很多人问我能不能有个稳定&#xff0c;不折腾的全球AI大模型测试网站&#xff0c;既能够保证真实靠谱&#xff0c;又能够保证稳定、快速&#xff0c;不要老动不动就挂了、出错或者漫长的响应。 直到笔者遇到了AskManyAI&#xff0c;直接就惊艳住了&#xff01; 话不多…

第17天:信息打点-语言框架开发组件FastJsonShiroLog4jSpringBoot等

第十七天 本课意义 1.CMS识别到后期漏洞利用和代码审计 2.开发框架识别到后期漏洞利用和代码审计 3.开发组件识别到后期漏洞利用和代码审计 一、CMS指纹识别-不出网程序识别 1.概念 CMS指纹识别一般能识别到的都是以PHP语言开发的网页为主&#xff0c;其他语言开发的网页识…

springboot-tomcat冲突

maven tomcat版本冲突异常 记录一个错误 在项目启动时报错&#xff1a; java.lang.AbstractMethodError: org.apache.tomcat.websocket.server.WsSessionListener.sessionCreated(Ljavax/servlet/http/HttpSessionEvent;)V 引入Session报错。 原因&#xff1a;Springboot默…

数据仓库—维度建模—维度表设计

维度表 维度表(Dimension Table)是数据仓库中描述业务过程中各种维度信息的表,用于提供上下文和描述性信息,以丰富事实数据的分析 维度表是维度建模的灵魂所在,在维度表设计中碰到的问题(比如维度变化、维度层次、维度一致性、维度整合和拆分等)都会直接关系到维度建模…

基于R语言实现的负二项回归模型【理解与实现】-理解负二项回归模型和泊松回归模型之间的区别

前言 我们可以在R语言中使用MASS包中的glm.nb函数来拟合负二项模型&#xff0c;以及使用glm函数来拟合泊松模型。以下是一个详细的过程&#xff0c;包括模拟数据的生成、模型的拟合、结果的比较和解释。 需要的包 if (!require("MASS")) install.packages("M…

【Leetcode每日一题】 分治 - 颜色分类(难度⭐⭐)(57)

1. 题目解析 题目链接&#xff1a;75. 颜色分类 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路解析 本算法采用三指针法&#xff0c;将数组划分为三个区域&#xff0c;分别用于存放值为0、1和2的元素。通过…