Kubeadm 安装支持IPV6 K8S1.28.x的简单过程

发布时间 2023-12-15 06:53:06作者: 济南小老虎

Kubeadm 安装支持IPV6 K8S的简单过程


背景

手贱
找了一个晚上想尝试安装一个K8S集群
并且可以支持IPV6 协议栈的
然后就开始各种百度. 各种处理
找到了一堆歪门邪道. 
但是还不知道对不对.
这里总结一下. 备忘(第二天就忘记昨天晚上干的事情了)

学习来源

第一个: 简书
https://www.jianshu.com/p/b10b2d996c40

第二个: 简书
https://www.jianshu.com/p/a04ad0d1f908

第三个: 下载calico的yaml文件
wget https://docs.tigera.io/calico/latest/manifests/calico.yaml

简单初始

/etc/hosts
/etc/sysctl.conf
/etc/selinux/config
swapoff -a
需要注意要增加ipv6的 forward 不然那会报错

使用来源进行安装必备的软件

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://dockerproxy.com",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://ccr.ccs.tencentyun.com"
    ]
}
EOF

使用来源的 源 进行安装处理

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
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
EOF

注意 CentOS7 使用 7  CentOS8 openEuler anolis 使用 el8 

安装一堆rpm

containerd.io-1.6.25-3.1.el8.x86_64.rpm
container-selinux-2.138-5.oe2203sp2.noarch.rpm
cri-dockerd-0.3.4-3.el8.x86_64.rpm
daemon.json
docker-buildx-plugin-0.11.2-1.el8.x86_64.rpm
docker-ce-24.0.7-1.el8.x86_64.rpm
docker-ce-cli-24.0.7-1.el8.x86_64.rpm
docker-ce-rootless-extras-24.0.7-1.el8.x86_64.rpm
docker-compose-plugin-2.21.0-1.el8.x86_64.rpm
cri-tools-1.28.0-150500.1.1.x86_64.rpm
kubeadm-1.28.4-150500.1.1.x86_64.rpm
kubectl-1.28.4-150500.1.1.x86_64.rpm
kubelet-1.28.4-150500.1.1.x86_64.rpm
kubernetes-cni-1.2.0-150500.2.1.x86_64.rpm
kubernetes.repo
libnetfilter_cthelper-1.0.0-16.oe2203sp2.x86_64.rpm
libnetfilter_cttimeout-1.0.0-15.oe2203sp2.x86_64.rpm
libnetfilter_queue-1.0.5-2.oe2203sp2.x86_64.rpm

导入一堆镜像

这里不分别列了 安装万 kubeadm 之后可以查看

kubeadm config images list

registry.k8s.io/kube-apiserver:v1.28.4
registry.k8s.io/kube-controller-manager:v1.28.4
registry.k8s.io/kube-scheduler:v1.28.4
registry.k8s.io/kube-proxy:v1.28.4
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.9-0
registry.k8s.io/coredns/coredns:v1.10.1

注意可以根据下面的初始化命令进行修改

注意 安装完 cri-docker 之后需要修改一下 cri-docker的配置 才可以进行相关的处理
修改 
/usr/lib/systemd/system/cri-docker.service
将里面的启动脚本修改为: 
注意 pause 的脚本需要根据具体情况来. 
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

kubeadm 初始化

kubeadm init --node-name=gscloudpg15  \ 
--image-repository=registry.aliyuncs.com/google_containers \
--cri-socket=unix:///var/run/cri-dockerd.sock \
--pod-network-cidr=2001:db8:42:0::/56,10.244.0.0/16 \
--service-cidr=2001:db8:42:1::/112,10.96.0.0/16  \
--apiserver-advertise-address=2408:400a:ed:d4ff:7a7b:f5dc:a12f:e5e7  \
--apiserver-bind-port=6443

# 注意 node-name 单节点时需要时 机器名
# 注意 镜像仓库可以进行正常的导入 离线处理 这次我其实是选用的 简书上面下载的资料 1.28.4 
# 注意 可以把ipv6的地址放在前面 ipv4的在后面
# 注意如果使用ipv6 必须增加上 --apiserver-advertise-address



初始化网络

flannel 可以支持ipv6 但是比较麻烦
感觉可以使用 calico的方式进行
可以下载 calico 
wget https://docs.tigera.io/calico/latest/manifests/calico.yaml

修改点主要有: 
修改config-map 
大概是在 40 行左右 增加IPV6的兼容支持  注意我这里忘记了 一个逗号, 浪费了一晚上的时间. 
修改yaml配置文件一定要仔细认真
主要的变化是:

          "ipam": {
              "type": "calico-ipam",
              "assign_ipv4": "true",
              "assign_ipv6": "true"
          },

原始文件内容变化: 

kind: ConfigMap
apiVersion: v1
metadata:
  name: calico-config
  namespace: kube-system
data:
  # Typha is disabled.
  typha_service_name: "none"
  # Configure the backend to use.
  calico_backend: "bird"

  # Configure the MTU to use for workload interfaces and tunnels.
  # By default, MTU is auto-detected, and explicitly setting this field should not be required.
  # You can override auto-detection by providing a non-zero value.
  veth_mtu: "0"

  # The CNI network configuration to install on each node. The special
  # values in this config will be automatically populated.
  cni_network_config: |-
    {
      "name": "k8s-pod-network",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "calico",
          "log_level": "info",
          "log_file_path": "/var/log/calico/cni/cni.log",
          "datastore_type": "kubernetes",
          "nodename": "__KUBERNETES_NODE_NAME__",
          "mtu": __CNI_MTU__,
          "ipam": {
              "type": "calico-ipam",
              "assign_ipv4": "true",
              "assign_ipv6": "true"
          },


          "policy": {
省略很多行

增加IPV6的兼容处理-2

在 container的配置界面处进行修改

            - name: CLUSTER_TYPE
              value: "k8s,bgp"
            # Auto-detect the BGP IP address.
            - name: IP
              value: "autodetect"
            - name: IP6
              value: "autodetect"

增加IP6的属性 
大概是第 4000多行
注意 CIDR  我这边跟kubeadm 里面初始化的是相同前缀. 具体原因我还不是很清楚 

4812             - name: FELIX_DEFAULTENDPOINTTOHOSTACTION
4813               value: "ACCEPT"
4814             # Disable IPv6 on Kubernetes.
4815
4816             - name: CALICO_IPV6POOL_CIDR
4817               value: 2001:db8:42:0::/56
4818             - name: FELIX_IPV6SUPPORT
4819               value: "true"
4820             - name: FELIX_HEALTHENABLED
4821               value: "true"

初始化calico

kubectl apply -f calico.yaml

会自动拉至少三个镜像, 跟网速有很大的关系
可以使用 
kubectl get pod -A -w 自动刷新查看pod的进展情况

kubectl get pod -A -w -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE   IP                         
kube-system   calico-kube-controllers-7ddc4f45bc-lnld6   1/1     Running   0          83m   2001:db8:1::e              
kube-system   calico-node-9msnb                          1/1     Running   0          37m   2408:400a:ed:d4ff:7a7b:f5dc
kube-system   coredns-66f779496c-8hdxk                   1/1     Running   0          84m   2001:db8:1::c              
kube-system   coredns-66f779496c-qm29r                   1/1     Running   0          84m   2001:db8:1::d              
kube-system   etcd-gscloudpg15                           1/1     Running   0          84m   2408:400a:ed:d4ff:7a7b:f5dc
kube-system   kube-apiserver-gscloudpg15                 1/1     Running   0          84m   2408:400a:ed:d4ff:7a7b:f5dc
kube-system   kube-controller-manager-gscloudpg15        1/1     Running   0          84m   2408:400a:ed:d4ff:7a7b:f5dc
kube-system   kube-proxy-8sj2j                           1/1     Running   0          84m   2408:400a:ed:d4ff:7a7b:f5dc
kube-system   kube-scheduler-gscloudpg15                 1/1     Running   1          84m   2408:400a:ed:d4ff:7a7b:f5dc


其他验证

下一个晚上进行, 希望别再有标点符号的问题了..