Kubeadm是Kubernetes官方推出的叢集管理工具,在K8s 1.13版本後已經可以在生產環境中使用,但是需要注意證書的過期問題。Kubeadm提供kubeadm init 和kubeadm join,用於快速部署Kubernetes叢集,極大地簡化了叢集的搭建過程。
1.安裝要求節點作業系統需要滿足:Ubuntu 16.04+Debian 9+CentOS 7Red Hat Enterprise Linux (RHEL) 7Fedora 25+HypriotOS v1.0.1+Flatcar Container Linux (tested with 2512.3.0)每臺機器有2G或更多的記憶體(少於2G就沒有多少空間留給應用了)至少2個CPU叢集中所有機器之間的全網路連線(公共網路或私有網路都可以)。每個節點擁有唯一的主機名、MAC地址以及product_uuid機器上需要開啟一些埠kubelet要想正常工作,必須禁用Swap分割槽2.環境準備為了演示目的,我搭建一個只包含一個master和一個node的叢集:
準備兩臺虛擬機器,一臺用作master,一臺用作node:
如果希望再新增一個節點,可以透過克隆的方式建立並修改IP:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
service network restart 重啟網路服務
3.環境初始化所有以下操作,,除非特別說明,都需要在master和node上執行:
關閉防火牆
systemctl stop firewalldsystemctl disable firewalld
關閉selinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config && setenforce 0
關閉swap分割槽
swapoff -a # 臨時sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab #永久
設定主機名並新增對映
分別在master和node上設定各自的主機名:
hostnamectl set-hostname k8s-masterhostnamectl set-hostname k8s-node1
在master上新增hosts對映:
cat >> /etc/hosts << EOF192.168.188.131 k8s-master192.168.188.132 k8s-node1EOF
將橋接的IPv4流量傳遞到iptables的鏈
cat > /etc/sysctl.d/k8s.conf << EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsudo sysctl --system
設定系統時區並同步時間伺服器
yum install ntpdate -yntpdate time.windows.com
4.安裝容器執行時
在所有機器上安裝容器執行時。
此處以Docker為例子:
下載並安裝Docker
$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repoyum -y install docker-ce-19.03.1.cesystemctl enable docker && systemctl start docker
配置映象加速器
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://3q4hxrrx.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
5.新增阿里雲Kubernetes YUM源
在所有機器上執行:
cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
6.安裝kubelet、kubeadm和kubectlkubeadm: 該命令主要用於啟動叢集。kubelet: 該元件執行在叢集中所有機器上,負責啟動pods和容器等事務。kubectl: 該命令列工具負責與叢集進行互動。在所有機器上執行:
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0systemctl enable kubelet
7.部署Kubernetes Master節點
在master上執行:
kubeadm init \--apiserver-advertise-address=192.168.188.131 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.18.0 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16
此處將映象倉庫地址指定為阿里雲,--service-cidr和--pod-network-cidr在保證地址不衝突的情況下可以按自己需求指定。
根據輸出的提示執行:
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
執行到這一步後,可以透過kubectl get nodes檢視節點狀態:
8.加入Kubernetes Node在Node1節點上執行:
kubeadm join 192.168.188.131:6443 --token n2ntd0.afns75z92axnx6wc \ --discovery-token-ca-cert-hash sha256:a88482632397fbe978d2104eec511609c0228b16f54199713d0586df907faf10
預設token的有效期為24小時,當過期之後,該token就不可用了,
如果後續有nodes節點加入,解決方法如下:
重新生成新的token
kubeadm token create
獲取ca證書sha256編碼hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
9.安裝CNI網路外掛
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
顯示如下錯誤資訊:
透過https://githubusercontent.com.ipaddress.com/raw.githubusercontent.com地址查詢到raw.githubusercontent.com的IP。
vim /etc/hosts
加入:
199.232.96.133 raw.githubusercontent.com
再次檢視叢集節點狀態:
10.測試Kubernetes叢集kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pods,svc
訪問服務: