集群管理
一、如何管理集群
kubectl是用于管理Kubernetes集群的命令行工具
二、語(yǔ)法格式:
kubectl [command] [TYPE] [NAME] [flags]
command:子命令,如create,get,describe,delete
type:資源類型,可以表示為單數(shù),復(fù)數(shù)或縮寫形式
name:資源的名稱,如果省略,則顯示所有資源信息
flags:指定可選標(biāo)志,或附加的參數(shù)
三、集群管理命令
子命令 | 說(shuō)明 |
help | 用于查看命令及子命令的幫助信息 |
cluster-info | 顯示集群的相關(guān)配置信息 |
version | 查看服務(wù)器及客戶端的版本信息 |
api-resources | 查看當(dāng)前服務(wù)器上所有的資源對(duì)象 |
api-versions | 查看當(dāng)前服務(wù)器上所有資源對(duì)象的版本 |
config | 管理當(dāng)前節(jié)點(diǎn)上kubeconfig的認(rèn)證信息 |
# 查看當(dāng)前認(rèn)證使用的用戶及證書
[root@master ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
# 使用 view 查看詳細(xì)配置
[root@master ~]# kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://192.168.1.50:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
四、管理主機(jī)授權(quán)
為其他主機(jī)添加管理權(quán)限
[root@harbor ~]# vim /etc/hosts
192.168.1.30 harbor
192.168.1.50 master
192.168.1.51 node-0001
192.168.1.52 node-0002
192.168.1.53 node-0003
192.168.1.54 node-0004
192.168.1.55 node-0005
# 安裝集群管理工具kubectl
[root@harbor ~]# yum install -y kubectl
# 拷貝證書到目標(biāo)主機(jī)
# 證書默認(rèn)路徑:${HOME}/.kube/config
[root@harbor ~]# mkdir -p $HOME/.kube
[root@harbor ~]# rsync -av master:/etc/kubernetes/admin.conf $HOME/.kube/config
# 設(shè)置證書的所有者和所屬組
[root@harbor ~]# chown $(id -u):$(id -g) $HOME/.kube/config
# 驗(yàn)證管理授權(quán)
[root@harbor ~]# kubectl get nodes
五、資源對(duì)象概述
什么是資源對(duì)象
k8s?中把可以創(chuàng)建或配置的應(yīng)用和服務(wù)稱為資源對(duì)象
我們?cè)诩褐袆?chuàng)建的Pod、負(fù)載均衡、存儲(chǔ)、網(wǎng)絡(luò)服務(wù)等等都是資源對(duì)象
如何創(chuàng)建資源對(duì)象
簡(jiǎn)單資源對(duì)象可以使用“kubectl”直接創(chuàng)建
高級(jí)資源對(duì)象需要使用“資源對(duì)象文件”創(chuàng)建
查看私有倉(cāng)庫(kù)中的鏡像
[root@master ~]# curl -sku admin https://harbor:443/v2/library/myos/tags/list | python3 -m json.tool
# 也可以通過(guò)瀏覽器網(wǎng)頁(yè)查看
創(chuàng)建Pod
使用run創(chuàng)建一個(gè)Pod資源對(duì)象
kubectl run Pod名稱 [選項(xiàng)/參數(shù)] --image=鏡像名稱:標(biāo)簽
# 創(chuàng)建資源對(duì)象
[root@master ~]# kubectl run myweb --image=myos:nginx
pod/myweb created
# 查詢資源對(duì)象
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
myweb 1/1 Running 0 3s 10.244.1.3 node-0001
[root@master ~]# curl http://10.244.1.3
Nginx is running !
六、Pod概述
- Pod由一個(gè)或多個(gè)容器組成
- Pod是Kubernetes中最小的管理元素
- 同一個(gè)Pod共享網(wǎng)絡(luò)IP及權(quán)限
- 同一個(gè)Pod共享主機(jī)名稱
- 同一個(gè)Pod共享存儲(chǔ)設(shè)備
Pod創(chuàng)建過(guò)程
為什么要使用Pod
- 服務(wù)之間有相關(guān)性
- 啟動(dòng)容器的時(shí)候需要初始化或進(jìn)行相關(guān)配置
Pod的生命周期
- Pod對(duì)象自從創(chuàng)建開始至終止的時(shí)間范圍稱為其生命周期
- 在這段時(shí)間中,Pod處在多種不同的狀態(tài),并執(zhí)行相關(guān)操作
- 創(chuàng)建主容器為必需的操作,其它為可選操作(初始化容器、啟動(dòng)后鉤子、存活性探測(cè)、就緒性探測(cè)以及終止前鉤子等)
Pod相位狀態(tài)
Pod的status字段是一個(gè)PodStatus的對(duì)象,Pod對(duì)象總是應(yīng)該處于其生命進(jìn)程中以下幾個(gè)相位(phase)之一:
Pending? ? ? ? Pod創(chuàng)建過(guò)程中,但他尚未被調(diào)度成功
Running? ? ? ? Pod中所有容器都已經(jīng)被創(chuàng)建成功
Completed? ? ? ? Pod所有容器都已經(jīng)成功終止,并不會(huì)被重啟
Failed? ? ? ? Pod中的所有容器中至少有一個(gè)容器退出是非0狀態(tài)
Unknow? ? ? ? 無(wú)法正常獲取到Pod對(duì)象的狀態(tài)信息
Pod管理命令
核心管理命令
系統(tǒng)中的核心服務(wù)都是運(yùn)行在Pod中
子命令 | 說(shuō)明 | 備注 |
run/create | 創(chuàng)建資源對(duì)象 | 可輸出資源文件模板 |
get | 查看資源對(duì)象的狀態(tài)信息 | 可選參數(shù):-o 顯示格式 |
describe | 查詢資源對(duì)象的屬性信息 | |
logs | 查看容器的報(bào)錯(cuò)信息 | 可選參數(shù):-c 容器名稱 |
kubectl get 語(yǔ)法格式:
kebectl get 資源對(duì)象 [資源名稱] [選項(xiàng)/參數(shù)]
常用參數(shù):
-o name 只顯示名字
-o wide 顯示更加的詳細(xì)信息
-o yaml 以yaml語(yǔ)法格式顯示資源對(duì)象
-o json 以json語(yǔ)法格式顯示資源對(duì)象
查看命名空間
[root@master ~]# kubectl get namespaces
NAME STATUS AGE
default Active 39h
kube-node-lease Active 39h
kube-public Active 39h
kube-system Active 39h
查看命名空間中的資源對(duì)象
[root@master ~]# kubectl -n kube-system get pods
NAME READY STATUS RESTARTS AGE
etcd-master 1/1 Running 0 39h
kube-apiserver-master 1/1 Running 0 39h
kube-controller-manager-master 1/1 Running 0 39h
kube-scheduler-master 1/1 Running 0 39h
... ...
系統(tǒng)命名空間
- default默認(rèn)的命名空間,不聲明命名空間的Pod都在這里
- kube-node-lease為高可用提供心跳監(jiān)視的命名空間
- kube-public公共數(shù)據(jù),所有用戶都可以讀取它
- kube-system系統(tǒng)服務(wù)對(duì)象所使用的命名空間
k8s系統(tǒng)核心服務(wù)都運(yùn)行在kube-system名稱空間中
kubectl describe語(yǔ)法格式:
kubectl describe 資源類型 [資源名稱] [選項(xiàng)/參數(shù)]
Events下是事務(wù)日志,常用于排錯(cuò)
常用管理命令
exec | 在某一個(gè)容器內(nèi)執(zhí)行特定的命令 | 可選參數(shù):-c 容器名稱 |
cp | 在容器和宿主機(jī)之間拷貝文件或目錄 | 可選參數(shù):-c 容器名稱 |
delete | 刪除資源對(duì)象 | 可選參數(shù):-f 文件名稱 |
kubectl exec
在容器內(nèi)執(zhí)行命令
kubectl? exec?[選項(xiàng)/參數(shù)] Pod名稱?-- 操作命令
常用參數(shù)
-it 分配交互式終端
# 執(zhí)行非交互命令
[root@master ~]# kubectl exec myweb -- ls
# 執(zhí)行交互命令
[root@master ~]# kubectl exec -it myweb -- /bin/bash
[root@myweb html]# # 這里可以交互式操作Pod了
kubectl cp
拷貝文件/目錄
kubectl cp [選項(xiàng)/參數(shù)] 原文件 目標(biāo)文件
路徑格式:[Pod名稱:絕對(duì)路徑]
# 與容器進(jìn)行文件或目錄傳輸
[root@master ~]# kubectl cp myweb:/etc/yum.repos.d /root/aaa
tar: Removing leading `/' from member names
[root@master ~]# tree /root/aaa
/root/aaa
├── local.repo
├── Rocky-AppStream.repo
├── Rocky-BaseOS.repo
......
[root@master ~]# kubectl -n work cp /etc/passwd myhttp:/root/mima
[root@master ~]# kubectl -n work exec myweb -- ls /root/
mima
kubectl delete
集群中所有資源均可使用 delete 命令刪除
kubectl delete [選項(xiàng)/參數(shù)] 資源類型 資源名稱
# 刪除一個(gè)Pod
[root@master ~]# kubectl delete pods myweb
pod "myweb" deleted
# 刪除 work 名稱空間下所有 Pod 對(duì)象
[root@master ~]# kubectl -n work delete pods --all
pod "myhttp" deleted
# 刪除名稱空間
[root@master ~]# kubectl delete namespaces work
namespace "work" deleted
資源對(duì)象管理
一、資源對(duì)象文件
什么是資源對(duì)象
- Kubernetes對(duì)象是“目標(biāo)性記錄”
- Kubernetes使用這些對(duì)象去表示整個(gè)集群的狀態(tài)
什么是資源對(duì)象文件
創(chuàng)建kubernetes對(duì)象時(shí),必須提供資源對(duì)象的一些基本信息(例如:資源的對(duì)象的名字),以及描述描述描述該對(duì)象的期望狀態(tài)特征(規(guī)約),如果我們?cè)谖募惺褂肶aml的語(yǔ)法格式描述了上面的信息,這個(gè)文件就是資源對(duì)象文件
為什么要使用資源對(duì)象文件
- 命令無(wú)法持久化,沒(méi)有歷史記錄,不方便重現(xiàn)
- 服務(wù)眾多,多個(gè)容器之間有關(guān)聯(lián)性,管理不方便
- 很多高級(jí)的復(fù)雜的功能靠簡(jiǎn)單的命令方式無(wú)法實(shí)現(xiàn),這些都需要使用資源文件描述
資源對(duì)象文件可以做什么
可以創(chuàng)建、刪除、變更、管理資源對(duì)象
示例:
--- # Yaml文件起始標(biāo)志
kind: Pod # 創(chuàng)建資源的類型
apiVersion: v1 # 資源對(duì)應(yīng)的版本
metadata: # 屬性信息,元數(shù)據(jù)
name: myweb # 屬性信息,資源的名稱
spec: # 資源的特性描述(規(guī)約)
containers: # 容器資源特征描述
- name: webserver
image: myos:nginx
status: {} # 資源狀態(tài),運(yùn)行后自動(dòng)生成
命名規(guī)范
- 當(dāng)你與指定的 API 對(duì)象進(jìn)行交互時(shí),使用大寫駝峰式命名法,也被稱為帕斯卡拼寫法(PascalCase)
- 不要將 API 對(duì)象的名稱切分成多個(gè)單詞
數(shù)組嵌套:
Json數(shù)據(jù):
{
? ? ? ? "ports":
? ? ? ? ? ? ? ? [ {"name":"xx","Port":80}, {"name":"hh","Port":443} ]? ? ? ? ?
}文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-842355.html
# Yaml語(yǔ)法格式文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-842355.html
ports:
- name: xx
Port: 80
- name: hh
Port: 443
什么是靜態(tài)Pod
- 靜態(tài)Pod是由kubelet守護(hù)進(jìn)程直接管理的Pod,不需要API服務(wù)器監(jiān)管。與由控制面管理的POd不同
- kubelet監(jiān)視每個(gè)靜態(tài)Pod(在它崩潰之后重新啟動(dòng))
- 靜態(tài)Pod永遠(yuǎn)都會(huì)綁定到一個(gè)指定節(jié)點(diǎn)上的kubelet
- 靜態(tài)Pod的spec不能引用其它API對(duì)象
- 靜態(tài)Pod配置路徑:/var/lib/kubelet/config.yaml
- staticPodPath:/etc/kubernetes/mainfests
# 創(chuàng)建靜態(tài)Pod
[root@node-0003 ~]# vim /etc/kubernetes/mainfests/myweb.yaml
---
kind: Pod
apiVersion: v1
metadata:
name: myweb
spec:
containers:
- name: webserver
image: myos:nginx
# 在master查看
[root@master ~]# kubectl get pods -o wide
......
# 刪除靜態(tài)Pod
在master上使用kubectl delete pod
kubelet會(huì)自動(dòng)重建Pod
刪除資源文件才能徹底刪除Pod
rm -f /etc/kubernetes/mainfests/myweb.yaml
二、管理資源對(duì)象
子命令 | 說(shuō)明 | 備注 |
create | 創(chuàng)建文件中定義的資源 | 支持指令式和資源對(duì)象文件配置 |
apply | 創(chuàng)建(更新)文件中定義的資源 | 只支持資源對(duì)象文件(聲明式) |
delete | 刪除文件中定義的資源 | 可支持指令式和資源對(duì)象文件配置 |
# 創(chuàng)建資源對(duì)象
[root@master ~]# kubectl create -f myweb.yaml
pod/myweb created
# 不能更新,重復(fù)執(zhí)行會(huì)報(bào)錯(cuò)
[root@master ~]# kubectl create -f myweb.yaml
Error from server (AlreadyExists): error when creating "myweb.yaml": pods "myweb" already exists
# 使用資源對(duì)象文件刪除
[root@master ~]# kubectl delete -f myhttp.yaml
pod "myhttp" deleted
[root@master ~]# kubectl get pods
No resources found in default namespace.
# 創(chuàng)建資源對(duì)象
[root@master ~]# kubectl apply -f myweb.yaml
pod/myweb created
# 更新資源對(duì)象
[root@master ~]# kubectl apply -f myweb.yaml
pod/myweb configured
# 刪除資源對(duì)象
[root@master ~]# kubectl delete -f myweb.yaml
pod "myweb" deleted
# 拓展提高
# 與 kubectl apply -f myweb.yaml 功能相同
[root@master ~]# cat myweb.yaml |kubectl apply -f -
到了這里,關(guān)于k8s-kubectl命令詳解、Pod創(chuàng)建過(guò)程、Pod的生命周期、定制Pod、資源對(duì)象文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!