網站首頁 編程語言 正文
命令行工具
在 kubernetes 中,主要有三個日常使用的工具,這些工具使用 kube 前綴命名,這三個工具如下:
-
kubeadm
:用來初始化集群的指令,能夠創(chuàng)建集群已經添加新的節(jié)點。可用其它部署工具替代。 -
kubelet
:在集群中的每個節(jié)點上用來啟動 Pod 和容器等,每個節(jié)點必須有,相對于節(jié)點與集群的網絡代理。 -
kubectl
:用來與集群通信/交互的命令行工具,與 kubernetes API-Server 通訊,是我們操作集群的客戶端。
kubelet、kubectl,kubelet 負責集群中節(jié)點間的通訊,kubectl 供用戶輸入命令控制集群,而且 kubeadm 則是創(chuàng)建集群、添加減少節(jié)點的工具。
安裝命令行工具
命令行工具是每個節(jié)點都需要安裝的, kubectl、kubelet 兩個是必需的組件,而 kubeadm 則可以被代替。kubeadm 是 Kubenetes 官方推薦的部署工具,但由于網絡等各方面原因,中文社區(qū)中也開發(fā)了一些替代項目,例如 Kubesphere(https://kubesphere.com.cn/),可在國內部署 Kubernetes,省去網絡問題。
通過軟件倉庫安裝
下面介紹如何 通過 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-get update && apt-get install -y apt-transport-https curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - cat </etc/apt/sources.list.d/kubernetes.list deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF
更新?apt
?包索引,安裝 kubelet、kubeadm 和 kubectl,并鎖定其版本:
sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
執(zhí)行命令檢查是否正常:
kubeadm --help
不同操作系統(tǒng)
只是這里介紹一下 ubuntu 和 centos 不同的安裝方法,已經通過前面的安裝方法安裝好,則不需要理會這一小節(jié)。
Ubuntu 和 Debain 等系統(tǒng)可以使用以下命令通過軟件倉庫安裝:
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 等系統(tǒng)可以使用以下命令通過軟件倉庫安裝:
cat </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
集群管理
創(chuàng)建 kubernetes 集群
Kubeadm 是一個創(chuàng)建管理工具,主要提供了?kubeadm init
?和?kubeadm join
?兩個命令,作為創(chuàng)建 Kubernetes 集群的 “快捷途徑” 的最佳實踐。
Kubernetes 集群由 Master 和 Worker 兩種節(jié)點組成,Master 節(jié)點負責控制集群所有的節(jié)點。
注意,本教程集群中的節(jié)點應當都是內網可互通的服務器,這些服務器之間可以通過內網相互訪問。如果是服務器之間通過公網相互通訊的,操作方法請查詢其它教程。
1,創(chuàng)建 Master
執(zhí)行?hostname -i
?查看此 node 的 ip。
我們初始化一個 API Server 服務,綁定地址為 192.168.0.8(按照你的ip改)。此步驟創(chuàng)建了一個 master 節(jié)點。
注:可以直接使用?kubeadm init
,它會自動使用默認網絡ip。
kubeadm init # 或 kubeadm init --apiserver-advertise-address 192.168.0.8 # 或 kubeadm init --apiserver-advertise-address $(hostname -i)
部署失敗,可以參考下面兩個命令,查看失敗原因。
systemctl status kubelet journalctl -xeu kubelet常見與 Docker 有關的錯誤可參考:?https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker
完成后,會提示一些信息,在提示的內容中找到:
kubeadm join 192.168.0.8:6443 --token q25z3f.v5uo5bphvgxkjnmz \ --discovery-token-ca-cert-hash sha256:0496adc212112b5485d0ff12796f66b29237d066fbc1d4d2c5e45e6add501f64
保存這段信息下來備用,后面加入節(jié)點時需要使用到。
如果有提示?Alternatively, if you are the root user, you can run:
則你還需要執(zhí)行下面的命令。
export KUBECONFIG=/etc/kubernetes/admin.conf
[Info] 提示
admin.conf 是連接 Kubernetes 的認證文件,通過此文件才能連接到 kubernetes,kubectl 也需要這個文件;在 Linux 中,使用 KUBECONFIG 環(huán)境變量知道認證文件的所在。
Linux 中每個用戶的環(huán)境變量是不同的,如果切換了用戶,則也需要設置 KUBECONFIG 環(huán)境變量;如果要在別的節(jié)點上連接集群,則可以把這個文件復制過去。
后面的操作都需要 admin.conf 文件,否則會報?The connection to the server localhost:8080 was refused - did you specify the right host or port?
?。
由于?export
?的環(huán)境變量不能持久化,請打開?~/.bashrc
?文件,把這個命令加到文件最后面。
[Info] 提示
為了保護 /etc/kubernetes/admin.conf,避免直接指向,建議每個用戶復制一次此文件到用戶目錄下,其命令如下:
mkdir -p $HOME/.kube cp -f /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
2,初始化網絡
這一步不是必需的,不過一般來說,部署 Kubernetes 會配置網絡,否則會節(jié)點之間不能相互訪問,讀者可以跟著做一次,在后面的章節(jié)中我們在一探究竟。
通過遠程配置文件初始化網絡,需要從第三方拉取一個 yaml 文件。
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" --namespace=kube-system # --namespace=kube-system 表示插件放到 kube-system 命名空間中運行
成功的話會提示:
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
我們也可以手動配置,執(zhí)行?kubectl version
?查看版本號,找到?GitVersion:v1.21.1
?,替換 yaml 文件的地址?https://cloud.weave.works/k8s/net?k8s-version=v1.21.1
,然后執(zhí)行?kubectl apply -n kube-system -f net.yaml
?即可。
3,加入集群
前面已經創(chuàng)建了 Master 節(jié)點,接下來將另一個服務器以 Worker 節(jié)點的方式加入集群中。如果讀者只有一臺服務器,則可以跳過這個步驟。
當節(jié)點加入 kubeadm 初始化的集群時,雙方需要建立雙向信任,分為發(fā)現(xiàn)(Worker信任Master) 和 TLS 引導(Master信任待加入Worker)兩部分。目前有兩種加入方式,一種是通過令牌加入,一種是通過 kubeconfig 文件加入。
格式:
kubeadm join --discovery-token abcdef.xxx {IP}:6443 --discovery-token-ca-cert-hash sha256:xxx kubeadm join--discovery-file file.conf
在第二個節(jié)點中,使用之前備份好的命令,直接執(zhí)行,加入集群,格式如下命令所示。
kubeadm join 192.168.0.8:6443 --token q25z3f.v5uo5bphvgxkjnmz \ --discovery-token-ca-cert-hash sha256:0496adc212112b5485d0ff12796f66b29237d066fbc1d4d2c5e45e6add501f64
復制粘貼時,要注意,可能會由于?\
?換行符,導致粘貼時,多了一個小數(shù)點,導致報錯。
可能碰到的問題
查看 docker 版本:yum list installed | grep docker
?和?docker version
。
如果部署過程中出現(xiàn)?failed to parse kernel config: unable to load kernel module
,也說明了 docker 版本太高,需要降級。
如果服務器裝了 dnf,那么降級 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 版本,兩者的版本號可能不一致。
刪除節(jié)點
在生產環(huán)境中,由于節(jié)點上已經部署著服務,因此直接刪除節(jié)點,可能會導致嚴重的故障問題。因此需要移除一個節(jié)點時,首先要在此節(jié)點上驅逐所有 Pods,Kubernetes 會自動將此節(jié)點上的 Pod 轉移到其它節(jié)點上部署(第三章會講)。
獲取集群中的所有節(jié)點,找到需要驅逐的節(jié)點名稱。
kubectl get nodes
驅逐此節(jié)點上所有的 Pod:
kubectl drain {node名稱}
雖然驅逐了節(jié)點上所有的服務,但是節(jié)點依然在集群中,只是 Kubernetes 不會再部署 Pod 到此節(jié)點上。如果需要恢復此節(jié)點,允許繼續(xù)部署 Pod,可使用:
kubectl uncordon {節(jié)點名稱}
關于驅逐,后面的章節(jié)會學習到。
注:驅逐 Pod,并一定能夠驅逐所有 Pod,有些 Pod 可能不會被清除。
最終刪除此節(jié)點:
kubectl delete node {節(jié)點名稱}
集群刪除了此節(jié)點后,節(jié)點上還保留著一些數(shù)據(jù),可以繼續(xù)清除環(huán)境。
清除環(huán)境
如果步驟做錯了想重來,或者移除節(jié)點需要清除環(huán)境,可以執(zhí)行?kubeadm reset [flags]
?命令。
注:只執(zhí)行?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.
我們需要執(zhí)行:
kubeadm reset cleanup-node kubeadm reset
即可在當前服務器上清除 Kubernetes 殘留的 容器或者其它數(shù)據(jù)。
原文鏈接:https://www.cnblogs.com/whuanle/p/15591554.html
相關推薦
- 2022-04-15 C++中構造函數(shù)詳解_C 語言
- 2022-06-19 mybatis-plus的sql語句打印問題小結_MsSql
- 2022-10-24 Android?Flutter實現(xiàn)上拉加載組件的示例代碼_Android
- 2022-06-08 SpringCache通用緩存學習
- 2022-05-20 SpringBoot整合Mybatis演示
- 2022-09-07 Python中的if判斷語句中包含or問題_python
- 2022-12-14 PostgreSQL模式匹配與正則表達式方法總結_PostgreSQL
- 2022-05-11 如何使 React 中的 useEffect、useLayoutEffect 只調用一次
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支