部署 flannel 网络插件

344 阅读4分钟

master 节点创建 kube-flannel.yml 配置文件

cat kube-flannel.yml 
apiVersion: v1
kind: Namespace
metadata:
  labels:
    k8s-app: flannel
    pod-security.kubernetes.io/enforce: privileged
  name: kube-flannel
---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: flannel
  name: flannel
  namespace: kube-flannel
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    k8s-app: flannel
  name: flannel
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - nodes/status
  verbs:
  - patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    k8s-app: flannel
  name: flannel
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: flannel
subjects:
- kind: ServiceAccount
  name: flannel
  namespace: kube-flannel
---
apiVersion: v1
data:
  cni-conf.json: |
    {
      "name": "cbr0",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "flannel",
          "delegate": {
            "hairpinMode": true,
            "isDefaultGateway": true
          }
        },
        {
          "type": "portmap",
          "capabilities": {
            "portMappings": true
          }
        }
      ]
    }
  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "EnableNFTables": false,
      "Backend": {
        "Type": "vxlan"
      }
    }
kind: ConfigMap
metadata:
  labels:
    app: flannel
    k8s-app: flannel
    tier: node
  name: kube-flannel-cfg
  namespace: kube-flannel
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: flannel
    k8s-app: flannel
    tier: node
  name: kube-flannel-ds
  namespace: kube-flannel
spec:
  selector:
    matchLabels:
      app: flannel
      k8s-app: flannel
  template:
    metadata:
      labels:
        app: flannel
        k8s-app: flannel
        tier: node
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/os
                operator: In
                values:
                - linux
      containers:
      - args:
        - --ip-masq
        - --kube-subnet-mgr
        command:
        - /opt/bin/flanneld
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: EVENT_QUEUE_DEPTH
          value: "5000"
        - name: KUBERNETES_SERVICE_HOST
          value: "10.0.30.47"    # 改为实际的 API Server IP
        - name: KUBERNETES_SERVICE_PORT
          value: "6443"          # 改为实际的 API Server 端口
        image: docker.io/flannel/flannel:v0.25.7
        name: kube-flannel
        resources:
          requests:
            cpu: 100m
            memory: 50Mi
        securityContext:
          capabilities:
            add:
            - NET_ADMIN
            - NET_RAW
          privileged: false
        volumeMounts:
        - mountPath: /run/flannel
          name: run
        - mountPath: /etc/kube-flannel/
          name: flannel-cfg
        - mountPath: /run/xtables.lock
          name: xtables-lock
      hostNetwork: true
      initContainers:
      - args:
        - -f
        - /flannel
        - /opt/cni/bin/flannel
        command:
        - cp
        image: docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel2
        name: install-cni-plugin
        volumeMounts:
        - mountPath: /opt/cni/bin
          name: cni-plugin
      - args:
        - -f
        - /etc/kube-flannel/cni-conf.json
        - /etc/cni/net.d/10-flannel.conflist
        command:
        - cp
        image: docker.io/flannel/flannel:v0.25.7
        name: install-cni
        volumeMounts:
        - mountPath: /etc/cni/net.d
          name: cni
        - mountPath: /etc/kube-flannel/
          name: flannel-cfg
      priorityClassName: system-node-critical
      serviceAccountName: flannel
      tolerations:
      - effect: NoSchedule
        operator: Exists
      volumes:
      - hostPath:
          path: /run/flannel
        name: run
      - hostPath:
          path: /opt/cni/bin
        name: cni-plugin
      - hostPath:
          path: /etc/cni/net.d
        name: cni
      - configMap:
          name: kube-flannel-cfg
        name: flannel-cfg
      - hostPath:
          path: /run/xtables.lock
          type: FileOrCreate
        name: xtables-lock

network 要和 kube-controller-manager cidr 配置一致

添加节点主机名解析

node 节点

cat /etc/hosts
#
127.0.1.1 localhost.localdomain VM-30-31-ubuntu
127.0.0.1 localhost
127.0.0.1 srv-k8s-node-02

::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

master 节点

cat /etc/hosts
#
127.0.1.1 localhost.localdomain VM-30-47-ubuntu
127.0.0.1 localhost
127.0.0.1 srv-k8s-plane

::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

10.0.30.26 srv-k8s-node-01
10.0.30.31 srv-k8s-node-02

部署 flannel

kubectl apply -f kube-flannel.yml 

下载 CNI 插件

下载地址:github.com/containerne…
解压后复制所有插件二进制文件到 /opt/cni/bin/

ls -l /opt/cni/bin/
total 92428
-rwxr-xr-x 1 root root  4648054 Oct 15 17:36 bandwidth
-rwxr-xr-x 1 root root  5283567 Oct 15 17:37 bridge
-rwxr-xr-x 1 root root 12771199 Oct 15 17:37 dhcp
-rwxr-xr-x 1 root root  4843811 Oct 15 17:37 dummy
-rwxr-xr-x 1 root root  5312426 Oct 15 17:36 firewall
-rwxr-xr-x 1 root root  2834432 Oct 27 22:36 flannel
-rwxr-xr-x 1 root root  4784447 Oct 15 17:37 host-device
-rwxr-xr-x 1 root root  4047543 Oct 15 17:37 host-local
-rwxr-xr-x 1 root root  4860660 Oct 15 17:37 ipvlan
-rw-r--r-- 1 root root    11357 Oct 15 17:37 LICENSE
-rwxr-xr-x 1 root root  4107060 Oct 15 17:37 loopback
-rwxr-xr-x 1 root root  4896553 Oct 15 17:37 macvlan
-rwxr-xr-x 1 root root  4703145 Oct 15 17:36 portmap
-rwxr-xr-x 1 root root  5068216 Oct 15 17:37 ptp
-rw-r--r-- 1 root root     2343 Oct 15 17:37 README.md
-rwxr-xr-x 1 root root  4330463 Oct 15 17:36 sbr
-rwxr-xr-x 1 root root  3648356 Oct 15 17:37 static
-rwxr-xr-x 1 root root  4920887 Oct 15 17:37 tap
-rwxr-xr-x 1 root root  4195353 Oct 15 17:36 tuning
-rwxr-xr-x 1 root root  4854297 Oct 15 17:37 vlan
-rwxr-xr-x 1 root root  4481459 Oct 15 17:36 vrf

重启其他依赖的服务

重启 docker、cri-docker、kubelet

检查 k8s 集群节点状态

kubectl get nodes
NAME              STATUS   ROLES    AGE   VERSION
srv-k8s-node-01   Ready    <none>   11h   v1.31.3