淺入kubernetes(5):嘗試kubeadm

本篇介紹利用 kubernetes 的命令行工具,快速創建集羣實例,完成 hello world 實踐。

上一篇試用 minikube 去搭建集羣,這一篇將介紹通過 kubeadm 去操作。

命令行工具

主要有三個工具,命令行工具使用 kube 前綴命名。

  • kubeadm:用來初始化集羣的指令。
  • kubelet:在集羣中的每個節點上用來啓動 Pod 和容器等。
  • kubectl:用來與集羣通信的命令行工具。

通過軟件倉庫安裝

方法 ①

此方法是通過 Google 的源下載安裝工具包。

更新 apt 包索引並安裝使用 Kubernetes apt 倉庫所需要的包:

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

下載 Google Cloud 公開簽名祕鑰:

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

添加 Kubernetes apt 倉庫:

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

更新 apt 包索引,安裝 kubelet、kubeadm 和 kubectl,並鎖定其版本:

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

方法 ②

通過阿里雲的源下載安裝工具包。

通過命令直接添加源。

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add 

然後更新軟件源並安裝這三個工具。

apt-get update && apt-get install -y apt-transport-https curl
apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated

執行命令檢查是否正常:

kubeadm --help

二進制文件下載安裝

查看 kubectl 最新穩定版本:

curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt

筆者當前查詢到的穩定版本是 v1.20.2。

下載 kubectl 可執行文件,可替換 URL 中的版本號。

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.20.2/bin/linux/amd64/kubectl

下載後,目錄可以看到一個 kubectl 文件,40MB 大小,國內下載速度稍慢,有可能無法下載,做好心理準備。

然後需要爲其賦予可執行文件權限。

sudo chmod +x ./kubectl

爲了可以直接使用 kubectl ,可以將文件複製到 bin 目錄。

sudo mv ./kubectl /usr/local/bin/kubectl

執行命令輸出版本號,檢查是否安裝成功。

kubectl version --client

輸出:

Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.0", GitCommit:"af46c47ce925f4c4ad5cc8d1fca46c7b77d13b38", GitTreeState:"clean", BuildDate:"2020-12-08T17:59:43Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}

ubutu & centos 快速安裝

只是這裏介紹一下 ubuntu 和 centos 不同的安裝方法,已經通過前面的安裝方法安裝好,則不需要理會這一小節。

Ubuntu 和 Debain 等系統可以使用以下命令通過軟件倉庫安裝:

sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2 curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl

Centos、RHEL 等系統可以使用以下命令通過軟件倉庫安裝:

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
yum install -y kubelet kubeadm kubectl

創建 kubernetes 集羣

前面介紹瞭如何按照這三個工具,如果你沒有服務器,我們可以使用開源組織提供的線上服務器進行測試。

地址:https://katacoda.com/

我們在第一個 node 中操作,創建 master。執行 hostname -i 查看此 node 的 ip。

Kubeadm 是一個提供了 kubeadm initkubeadm join 的工具,作爲創建 Kubernetes 集羣的 “快捷途徑” 的最佳實踐。

1,創建 Master

我們初始化一個 API Server 服務,綁定地址爲 192.168.0.8(按照你的ip改)。此步驟創建了一個 master 節點。

注:可以直接使用 kubeadm init,它會自動使用默認網絡ip。

kubeadm init --apiserver-advertise-address 192.168.0.8

完成後,會提示:

kubeadm join 192.168.0.8:6443 --token q25z3f.v5uo5bphvgxkjnmz \
	--discovery-token-ca-cert-hash sha256:0496adc212112b5485d0ff12796f66b29237d066fbc1d4d2c5e45e6add501f64

保存下來,後面備用。

如果有提示 Alternatively, if you are the root user, you can run:則你還需要執行下面的命令。

export KUBECONFIG=/etc/kubernetes/admin.conf

2,然後初始化集羣網絡。

接着執行初始化命令處理配置。注意,需要 admin.conf 才能執行命令,否則會報 The connection to the server localhost:8080 was refused - did you specify the right host or port?

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

然後執行這個命令初始化。

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

成功的話會提示:

serviceaccount/weave-net created
clusterrole.rbac.authorization.k8s.io/weave-net created
clusterrolebinding.rbac.authorization.k8s.io/weave-net created
role.rbac.authorization.k8s.io/weave-net created
rolebinding.rbac.authorization.k8s.io/weave-net created
daemonset.apps/weave-net created

3,加入集羣

再創建一個新的節點(另一臺服務器),執行 hostname -i 查看 ip。

在第二個節點中,執行命令,加入集羣。請替換命令中的 192.168.0.8 爲正確的 master 節點 的 ip。

kubeadm join 192.168.0.8:6443 --token q25z3f.v5uo5bphvgxkjnmz \
	--discovery-token-ca-cert-hash sha256:0496adc212112b5485d0ff12796f66b29237d066fbc1d4d2c5e45e6add501f64

接着新建第二第三個 node,執行上面的 kubeadm join 命令,加入集羣。

如果出現 failed to parse kernel config: unable to load kernel module,說明 docker 版本太高,需要降級。

查看 docker 版本:yum list installed | grep dockerdocker version

降級 docker 版本。

dnf remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
dnf -y install dnf-plugins-core
dnf install docker-ce-18.06.3.ce-3.el7 docker-ce-cli containerd.io

不行的話就按照 https://docs.docker.com/engine/install/centos/ 安裝。

注意,docker version 會看到 client 和 server 版本,兩者的版本號可能不一致。

清除環境

如果步驟做錯了或者想重來,可以執行 kubeadm reset [flags] 命令。

注:只執行 kubeadm reset 命令無效。

[flags] 有四種類型:

preflight              Run reset pre-flight checks
update-cluster-status  Remove this node from the ClusterStatus object.
remove-etcd-member     Remove a local etcd member.
cleanup-node           Run cleanup node.

我們需要執行:

kubeadm reset cleanup-node 
kubeadm reset 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章