天天看點

kubernetes - 叢集搭建(kubeadm)

作者:智者漂流瓶Uq

1、前置知識點 目前生産部署 Kubernetes 叢集主要有兩種方式:

(1)kubeadm Kubeadm 是一個 K8s 部署工具,提供 kubeadm init 和 kubeadm join,用于快速部 署 Kubernetes 叢集。

官方位址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

(2)二進制包 從 github 下載下傳發行版的二進制包,手動部署每個元件,組成 Kubernetes 叢集。 Kubeadm 降低部署門檻,但屏蔽了很多細節,遇到問題很難排查。如果想更容易可 控,推薦使用二進制包部署 Kubernetes 叢集,雖然手動部署麻煩點,期間可以學習很 多工作原理,也利于後期維護。

2、kubeadm 部署方式介紹 kubeadm 是官方社群推出的一個用于快速部署 kubernetes 叢集的工具,這個工具能通 過兩條指令完成一個 kubernetes 叢集的部署: 第一、建立一個 Master 節點 kubeadm init 第二, 将 Node 節點加入到目前叢集中 $ kubeadm join

3、安裝要求 在開始之前,部署 Kubernetes 叢集機器需要滿足以下幾個條件: - 一台或多台機器,作業系統 CentOS7.x-86_x64 - 硬體配置:2GB 或更多 RAM,2 個 CPU 或更多 CPU,硬碟 30GB 或更多 - 叢集中所有機器之間網絡互通 - 可以通路外網,需要拉取鏡像 - 禁止 swap 分區

4、最終目标

(1) 在所有節點上安裝 Docker 和 kubeadm

(2)部署 Kubernetes Master

(3)部署容器網絡插件

(4)部署 Kubernetes Node,将節點加入 Kubernetes 叢集中

(5)部署 Dashboard Web 頁面,可視化檢視 Kubernetes 資源

5、準備環境 角色 IP k8s-master 192.168.31.61 k8s-node1 192.168.31.62 k8s-node2 192.168.31.63

6、系統初始化

6.1 關閉防火牆: $ systemctl stop firewalld $ systemctl disable firewalld

6.2 關閉 selinux: $ sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久 $ setenforce 0 # 臨時

6.3 關閉 swap: $ swapoff -a # 臨時 $ vim /etc/fstab # 永久

6.4 主機名: $ hostnamectl set-hostname

6.5 在 master 添加 hosts: $ cat >> /etc/hosts << EOF 192.168.31.61 k8s-master 192.168.31.62 k8s-node1 192.168.31.63 k8s-node2 EOF

6.6 将橋接的 IPv4 流量傳遞到 iptables 的鍊: $ cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF $ sysctl --system # 生效

6.7 時間同步: $ yum install ntpdate -y $ ntpdate time.windows.com

7、所有節點安裝 Docker/kubeadm/kubelet Kubernetes 預設 CRI(容器運作時)為 Docker,是以先安裝 Docker。 (1)安裝 Docker $ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo $ yum -y install docker-ce-18.06.1.ce-3.el7 $ systemctl enable docker && systemctl start docker $ docker --version

(2)添加阿裡雲 YUM 軟體源 設定倉庫位址 # cat > /etc/docker/daemon.json << EOF { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] } EOF 添加 yum 源 $ cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF

(3)安裝 kubeadm,kubelet 和 kubectl $ yum install -y kubelet kubeadm kubectl $ systemctl enable kubelet

8、部署 Kubernetes Master

(1)在 192.168.31.61(Master)執行 $ kubeadm init \ --apiserver-advertise-address=192.168.31.61 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.17.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 由于預設拉取鏡像位址 k8s.gcr.io 國内無法通路,這裡指定阿裡雲鏡像倉庫位址。

(2)使用 kubectl 工具: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config $ kubectl get nodes

9、安Pod 網絡插件(CNI) $ kubectl apply –f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube[1]flannel.yml 確定能夠通路到 quay.io 這個 registery。如果 Pod 鏡像下載下傳失敗,可以改這個鏡像位址

10、加入 Kubernetes Node

(1)在 192.168.31.62/63(Node)執行 向叢集添加新節點,執行在 kubeadm init 輸出的 kubeadm join 指令:

: $ kubeadm join 192.168.31.61:6443 --token esce21.q6hetwm8si29qxwn \ --discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5

11、測試 kubernetes 叢集 在 Kubernetes 叢集中建立一個 pod,驗證是否正常運作:

$ kubectl create deployment nginx --image=nginx $ kubectl expose deployment nginx --port=80 --type=NodePort $ kubectl get pod,svc

通路位址:http://NodeIP:Port

繼續閱讀