CentOS 7 上安裝 K8s 自家練習環境

[文章目录]
  1. K8s 基本環境安裝
    1. 注意事項:
      1. 稍後進行 kubeadm init 之後,即會產生此檔案 /var/lib/kubelet/config.yaml,而且此服務會自行重啟,直到成功。
  • K8s 初始化叢集
    1. 初始化之前,先進行 gcr.io 連線測試
    2. 初始化經驗
    3. 初始化參數:
    4. 注意事項:
      1. 初始化第一次錯誤,原因有二
  • 允許非 root 權限下執行 kubectl
  • 設定 CNI:Flannel
    1. 檢查狀態
  • Joining your nodes
    1. 進行 Join nodes 之前,需要確認兩件事情
  • 以上僅是初步完成 K8s 環境安裝
  • 這篇算是複習、重點回顧
  • 挑戰在後頭
  • 先前,我搭建過乙次 K8s + CRI-O 環境,記錄於下列五篇文章中~
    文章一
    文章二
    文章三
    文章四
    文章五

    此次,基於上次的經驗,建構公司要使用的 Lab 環境,也為了簡單化,CRI 部分先採用大家熟悉的 Docker。
    安裝過程,主要也是參照官網說明頁,不再另外記載~ 貼上去於此,就沒有什麼意思
    如有注意事項或者錯誤資訊,會在下面記載下來。


    K8s 基本環境安裝

    安裝有下列三步驟:

    1. 安裝的準備

      • 進行之前,得先關閉 SWAP~
      • 確認 SELinux in permissive mode
      • 配置與生效系統參數 /etc/sysctl.d/k8s.conf
        • net.bridge.bridge-nf-call-ip6tables = 1
        • net.bridge.bridge-nf-call-iptables = 1
        • net.ipv4.ip_forward = 1
        • vm.swappiness = 0
    2. 先安裝 CRI 元件,這次選擇 Docker
      參考此官網說明頁

    3. 安裝 kubeadm, kubelet and kubectl
      參考此官網說明頁

    注意事項:

    • 啟用後,kubelet 仍是沒順利啟用,錯誤訊息如下:
      1
      2
      3
      4
      Jan 10 18:20:40 dev-k8sm1 kubelet: F0110 18:20:40.118057   40783 server.go:189] 
      failed to load Kubelet config file /var/lib/kubelet/config.yaml,
      error failed to read kubelet config file "/var/lib/kubelet/config.yaml",
      error: open /var/lib/kubelet/config.yaml: no such file or directory

    稍後進行 kubeadm init 之後,即會產生此檔案 /var/lib/kubelet/config.yaml,而且此服務會自行重啟,直到成功。


    K8s 初始化叢集

    以上,已經將基本的 K8s 初步元件安裝完畢,下面我們來進行 K8s 初始化叢集環境~

    初始化之前,先進行 gcr.io 連線測試

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # kubeadm config images pull log
    [afu@dev-k8sm1 ~]$ sudo kubeadm config images pull
    [config/images] Pulled k8s.gcr.io/kube-apiserver:v1.13.1
    [config/images] Pulled k8s.gcr.io/kube-controller-manager:v1.13.1
    [config/images] Pulled k8s.gcr.io/kube-scheduler:v1.13.1
    [config/images] Pulled k8s.gcr.io/kube-proxy:v1.13.1
    [config/images] Pulled k8s.gcr.io/pause:3.1
    [config/images] Pulled k8s.gcr.io/etcd:3.2.24
    [config/images] Pulled k8s.gcr.io/coredns:1.2.6

    初始化經驗

    在初始化的參數中,必須要有 pod network cidr,參數--pod-network-cidr
    如需要指定 interface IP 作為 apiserver 服務IP,則需要有參數--apiserver-advertise-address

    初始化參數:

    1
    sudo kubeadm init --apiserver-advertise-address=$(hostname -i)  --pod-network-cidr=10.244.0.0/16

    注意事項:

    初始化第一次錯誤,原因有二

    1
    2
    3
    4
    5
    6
    7
    # 初始化資訊
    [init] Using Kubernetes version: v1.13.1
    [preflight] Running pre-flight checks
    [WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly
    error execution phase preflight: [preflight] Some fatal errors occurred:
    [ERROR Swap]: running with swap on is not supported. Please disable swap
    [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
    1. 以上提醒了要開放防火牆 6443/TCP、10250/TCP
      開放方式

      1
      2
      3
      sudo firewall-cmd --zone=public --add-port=6443/tcp --permanent
      sudo firewall-cmd --zone=public --add-port=10250/tcp --permanent
      sudo firewall-cmd --reload
    2. 忘了關閉 swap,糗~
      關閉方式

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      # 關閉 SWAP
      sudo swapoff -a
      sudo vi /etc/fstab
      # 註解下列 swap volume
      #/dev/mapper/VolGroup00-LogVol01 swap swap defaults

      sudo vi /etc/sysctl.d/k8s.conf
      net.bridge.bridge-nf-call-ip6tables = 1
      net.bridge.bridge-nf-call-iptables = 1
      vm.swappiness=0

      sudo sysctl --system

    初始化成功紀錄:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    [afu@dev-k8sm1 ~]$ sudo kubeadm init --apiserver-advertise-address=$(hostname -i)  --pod-network-cidr=10.244.0.0/16
    [init] Using Kubernetes version: v1.13.1
    Your Kubernetes master has initialized successfully!

    To start using your cluster, you need to run the following as a regular user:

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

    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
    https://kubernetes.io/docs/concepts/cluster-administration/addons/

    You can now join any number of machines by running the following on each node
    as root:

    kubeadm join API-IP:6443 --token abc.zzxxccvv --discovery-token-ca-cert-hash sha256:0123456789

    允許非 root 權限下執行 kubectl

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

    如果您有 root ,建議執行
    export KUBECONFIG=/etc/kubernetes/admin.conf


    設定 CNI:Flannel

    要使用 Flannel 作為 CNI,則在稍早 kubeadm init 中指定參數 --pod-network-cidr=10.244.0.0/16
    稍早我有指定,無誤~
    需要設定 sysctl net.bridge.bridge-nf-call-iptables=1,好讓流量能夠透過 iptables 通行。
    這項稍早也完成設定,無誤~

    檢查狀態

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [afu@dev-k8sm1 ~]$ sudo systemctl status kubelet
    ● kubelet.service - kubelet: The Kubernetes Node Agent
    Loaded: loaded (/etc/systemd/system/kubelet.service; enabled; vendor preset: disabled)
    Drop-In: /etc/systemd/system/kubelet.service.d
    └─10-kubeadm.conf
    Active: active (running) since Thu 2019-01-10 21:12:30 CST; 19min ago
    Docs: https://kubernetes.io/docs/
    Main PID: 56904 (kubelet)

    [afu@dev-k8sm1 ~]$ kubectl get pods --all-namespaces
    NAMESPACE NAME READY STATUS RESTARTS AGE
    kube-system coredns-86c58d9df4-4kp2l 1/1 Running 0 18m
    kube-system coredns-86c58d9df4-zfh7s 1/1 Running 0 18m
    kube-system etcd-dev-k8sm1.kingbay-tech.com 1/1 Running 0 17m
    kube-system kube-apiserver-dev-k8sm1.kingbay-tech.com 1/1 Running 0 17m
    kube-system kube-controller-manager-dev-k8sm1.kingbay-tech.com 1/1 Running 0 17m
    kube-system kube-flannel-ds-amd64-rx877 1/1 Running 0 28s
    kube-system kube-proxy-dvm46 1/1 Running 0 18m
    kube-system kube-scheduler-dev-k8sm1.kingbay-tech.com 1/1 Running 0 17m

    Joining your nodes

    

    進行 Join nodes 之前,需要確認兩件事情

    1. 需要完成 CRI Docker 安裝
    2. 需要完成 kubeadm 安裝

    上述確認無誤後,即可於上述的 kubeadm join 資訊,完成 Join 動作。

    以上僅是初步完成 K8s 環境安裝

    這篇算是複習、重點回顧

    挑戰在後頭