首頁>技術>

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

訪問服務:

15
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 「Rust程式設計」在Rust中使用C庫