步驟:

關閉 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/^.* //'

參考資料:

https://www.techrepublic.com/article/how-to-install-a-kubernetes-cluster-on-centos-7/

對「CentOS 7 安裝 Kubernetes (一) – 建立 Cluster」的一則回應

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

  2. 請問,這篇在新的硬體上安裝系統後創建新的節點然後加入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. 這部份我不太清楚你的意思,登入系統本身就是一個權限控制?登入前應該是沒有辦法使用這些功能的

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

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

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

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

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

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

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

      Liked by 1 person

    1. 謝謝你,提供資料給我,目前我都無誤操作了,但因為防火牆沒關的關係,節點機器那邊,將「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」這個指令才是正確的

  4. 我後來改自己手創文件,有成功過去,但是在「初始化 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」
    正在嘗試解決

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

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

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s