CentOS 7 安裝 Kubernetes (一) – 建立 Cluster

Published by

on

步驟:

關閉 SElinux 以及 SWAP

# setenforce 0
# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
# swapoff -a
# vim /etc/fstab

以下為範例,請依照實際環境修改

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

將 swap 的行數註解掉後,重新啟動系統

啟用 br_netfilter:

主要讓 kuberneter cluster 之間可以透過 iptables 互相處理封包

# modprobe br_netfilter
# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

安裝設定前的必要套件:

# yum install -y yum-utils device-mapper-persistent-data lvm2

安裝 Docker repo:

# yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

安裝 kubernetes repo (2019.04.19 修正):

# cat <<EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]
 name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF 

安裝 kubernetes

# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

設定 group 與 Docker 相同,並啟動 kubelet

# sed -i 's/cgroup-driver=systemd/cgroup-driver=cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
# systemctl daemon-reload
# systemctl restart kubelet

初始化 kubernetes cluster
請依照實際網路環境或是您的需求設定網段

# kubeadm init --apiserver-advertise-address=172.16.1.101 --pod-network-cidr=172.16.1.0/16

Node 加入 Master (紅字請依照實際環境修改)

# kubeadm join 172.16.1.101:6443 --token TOKEN --discovery-token-ca-cert-hash DISCOVERY_TOKEN

配置 kubernetes 權限

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

佈署 flannel 網路

# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

查詢 Maste & Node 是否成功

# kubectl get nodes
CentOS 7 安裝 Kubernetes (一)-01.jpg

備註:

如果中間忘了 kubernetes join 的參數,可以透過下面的方式取得

# kubeadm join 172.16.1.101:6443 --token TOKEN --discovery-token-ca-cert-hash DISCOVERY_TOKEN

TOKEN 可透過以下指令查詢後取得

# kubeadm token list | awk '{print $1}'

DISCOVERY_TOKEN 可透過以下指令查詢取得

# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

參考資料:

How to install a Kubernetes cluster on CentOS 7

「CentOS 7 安裝 Kubernetes (一) – 建立 Cluster」 有 27 則迴響

  1. 「Ken Wu」的個人頭像

    我也是使用 minimail install,或許如同你所說的是版本有差異,我有機會驗證之後再進行更新文章。

  2. 「JonesChan」的個人頭像
    JonesChan

    請問,這篇在新的硬體上安裝系統後創建新的節點然後加入Master中的操作嗎?
    還是這篇發表當時的K8S版本初始化並不會幫你加入Master,而是必須手動加入?
    提問的原因是我在安裝時進行到步驟
    kubeadm join MYIP:6443 –token TOKEN –discovery-token-ca-cert-hash DISCOVERY_TOKEN
    時 系統回應四個錯誤訊息
    /etc/kubernetes/manifests is not empty
    /etc/kubernetes/kubelet.conf already exists
    Port 10250 is in use
    /etc/kubernetes/pki/ca.crt already exists

    這四個,其中前三項我確定
    /etc/kubernetes/manifests 在
    kubeadm init –apiserver-advertise-address…
    之前是空的,也沒它說的那些檔案,port也確實沒被占用

    PS.前面安裝步驟有點問題,因系統最小安裝所以預設br_netfilter沒有裝,追查後才知道這步驟後面基本上就是失敗收場,因此才會知道 /etc/kubernetes/manifests 路徑底下本來是空的

  3. 「沈政宗」的個人頭像
    沈政宗

    設定 group 與 SDocker 相同 確定文章中的config路徑不存在
    個人調查一下K8S的config檔放到 /etc/kubernetes裡面去了

    1. 「沈政宗」的個人頭像
      沈政宗

      /etc/systemd/system裡面則不存在kubelet.service.d

    2. 「Ken Wu」的個人頭像

      感謝您的說明

  4. 「韋弘智」的個人頭像
    1. 「Ken Wu」的個人頭像

      這部份我不太清楚你的意思,登入系統本身就是一個權限控制?登入前應該是沒有辦法使用這些功能的

    2. 「韋弘智」的個人頭像
      韋弘智

      我本來是想問K8S 是否有像Docker Hub的那種用戶機制,不希望任何人都能將資料部署出去這樣

    3. 「韋弘智」的個人頭像
      韋弘智

      嗯 … 我花了兩三天的時間再研究這部份了,因為我算是半路出家,有在想Linux本身有沒有辦法達成

      主要是,在上傳image的時候要能確認身分或部署節點的時候確認身分,這樣查Log比較能知道是誰操作

    4. 「Ken Wu」的個人頭像

      每個人都一個帳號會是比較好的作法

    5. 「韋弘智」的個人頭像
      韋弘智

      主要是,再部署的時候,並沒有詢問用戶帳號的部分

      我有考慮讓K8S和Harbor做結合,但是K8s一直沒辦法將Harbor的image拉出來用

    6. 「Ken Wu」的個人頭像

      這部份我也還在摸索階段,沒辦法給您太多建議了…

    7. 「韋弘智」的個人頭像
      韋弘智

      謝謝你,我順利透過Harbor去管理,然後再將下載的image加入K8s的Pod中部署出去

      也用了sudo功能,讓固定用戶無法下部署指令了

      Liked by 1 person

    8. 「Ken Wu」的個人頭像

      感謝您提供的方式。有空我會來試試看 Harbor

  5. 「韋弘智」的個人頭像
    韋弘智

    裝不起來呢 …

    1. 「Ken Wu」的個人頭像

      可能我過程有些地方表達得不夠精確,可以參考一下裡面的參考連結看看

      How to install a Kubernetes cluster on CentOS 7

    2. 「韋弘智」的個人頭像
      韋弘智

      謝謝你,提供資料給我,目前我都無誤操作了,但因為防火牆沒關的關係,節點機器那邊,將「Node 加入 Master」的部分,一直卡在[preflight] Running pre-flight checks 這個狀態

      ———————-
      主機那邊,都已經確實部署成功,但是「https://172.16.16.13:30310/#!/login」也是需要關閉防火牆才能連接上
      但是接上去後會報
      「您目前無法造訪 172.16.16.13,因為這個網站傳送的憑證是亂碼,Google Chrome 無法處理。網路錯誤和攻擊行為通常是暫時性的,因此這個網頁可能稍後就會正常運作。」

      不知道您是否有遇到這個問題,還請大哥您不吝指教

      另外,您文章有一個部分需要修正

      「cat < /etc/yum.repos.d/kubernetes.repo」這個指令才是正確的

    3. 「Ken Wu」的個人頭像

      cat <<EOF > /etc/yum.repos.d/kubernetes.repo
      [kubernetes]
      name=Kubernetes
      baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
      enabled=1
      gpgcheck=1
      repo_gpgcheck=1
      gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
      EOF

      如上,存檔的時html格式錯誤,導致有錯誤,已修改格式

    4. 「Ken Wu」的個人頭像

      提到的問題,可以參考這篇
      https://reurl.cc/R9ReG

  6. 「」的個人頭像
    匿名

    好吧,完全裝不起來,@@

  7. 「韋弘智」的個人頭像
    韋弘智

    我後來改自己手創文件,有成功過去,但是在「初始化 kubernetes cluster」
    我的虛擬機是 172.16.16.33
    修改指令如下
    「kubeadm init –apiserver-advertise-address=172.16.16.33 –pod-network-cidr=172.16.16.0/16」
    報錯「error execution phase wait-control-plane: couldn’t initialize a Kubernetes cluster」
    正在嘗試解決

  8. 「韋弘智」的個人頭像
    韋弘智

    設定 group 與 Docker 相同
    這邊會報錯「sed: can’t read /etc/systemd/system/kubelet.service.d/10-kubeadm.conf: No such file or directory」

    1. 「Ken Wu」的個人頭像

      可能要確認檔案或資料是否存在?

    2. 「韋弘智」的個人頭像
      韋弘智

      我手動創建,會導致後面加入節點的時候出現問題,但為啥依照流程裝下來,會缺這個文件呢?google過甚麼特別能解決得方案

  9. 「CentOS 7 安裝 Kubernetes (三) – 安全的登入方式 – Ken Wu」的個人頭像

    […] CentOS 7 安裝 Kubernetes (一) – 建立 Cluster […]

  10. 「CentOS 7 安裝 Kubernetes (二) – 安裝 Kubernetes Dashboard – Ken Wu」的個人頭像

    […] CentOS 7 安裝 Kubernetes Cluster (一) […]

發表留言

透過 WordPress.com 建置的網站.