2019年5月7日 星期二

kubernetes cluster 安裝

從 kubernetes 1.14 之後,越來越容易用 kubeadm 安裝 cluster 了,基本的環境準備好之後,熟練的話可能十分鐘就裝好一個 kuberentes cluster (master * 3 + worker * 3)

為了簡化設定環境,可以把六台的 selinux 和 firewall 都先關掉。
安裝環境假設準備如下:

  1. 六台機器, OS 為 CentOS 7
    假設其 ip 為 192.168.1.11 ~ 192.168.1.16
  2. 選定一台當第一台 master,設定 master 可以直接以 ssh key 登入其他五台
    假設第一台 master 為 192.168.1.11
    另外兩台 master 分別是 192.168.1.12 及 192.168.1.13
  3. 準備一台機器設定好 haproxy ,做為三台 master node 的前端 proxy
    假設 haproxy 的 ip 為 192.168.1.10
  4. 六台機器都準備以下文件 (檔案內容放在文後)
    * /etc/yum.repos.d/kubernetes.repo
    第一台 master 準備以下文件 (檔案內容放在文後)
    * /tmp/kube-config.yaml
  5. 六台先進行如下設定
    # yum update && yum install -y yum-utils
    # yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    # yum install -y docker-ce kubelet kubeadm kubectl --disableexcludes=kubernetes
    # systemctl enable --now docker
    # systemctl enable --now kubelet
    # swapoff -a
    * modprobe br_netfilter

到 192.168.1.11 (第一台 master) 開始安裝
# kubeadm init --config=/tmp/kube-config.yaml --experimental-upload-certs

一行指令就安裝完成了。

安裝完成後會提供一些訊息,其中有兩行分別是提供給其他 master 或 worker 加入 cluster,訊息內容類似如下:

kubeadm join 192.168.1.10:6443 --token 9vr73a.a8uxyaju799qwdjv --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866 --experimental-control-plane --certificate-key f8902e114ef118304e561c3ecd4d0b543adc226b7a07f675f56564185ffe0c07
將這個指令複製下來到 192.168.1.12 及 192.168.1.13 上面執行,就可以將這兩台以 master 身份加入到 cluster 
kubeadm join 192.168.1.10:6443 --token 9vr73a.a8uxyaju799qwdjv --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866
將這個指令複製下來到另外三台上面執行,就可以將這三台以 worker 身份加入到 cluster

要注意的是,兩個指令裡的 token 及 key 是有使用期限的,時間到了 token 和 key 就會被移除。所以如果一段時間後要將新的機器加
入 cluster ,就需要透過 kubeadm 指令重新產生 token 和 key 來使用。

不過在將其他台機器加入 cluster 之前,還有一個動作要先做,要指定及安裝 kubernetes cluster 內部使用的網路模式 (CNI),這邊以 weave 為範例,在第一台 master 上執行以下指令

# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"


最後附上需要的設定檔

/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
exclude=kube*

* /tmp/kube-config.yaml
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: stable
controlPlaneEndpoint: "192.168.1.10:6443"
networking:
  podSubnet: 10.244.0.0/16

沒有留言: