使用 Kubectl 管理 Kubernetes 容器平臺
- 一、Kubectl 概述
- 二、Kubectl 創建和洗掉一個 pod 相關操作
- 1.在集群上運行一個鏡像
- 2.Kubectl run 語法
- 3.pods 常見的狀態
- 3.使用 Kubectl delete 洗掉創建的物件
- 1)洗掉 pod
- 2)洗掉 deployment
- 三、yaml 語法規則
- 1.yaml 語法的基本語法規則
- 2.yaml 支持的三種資料結構
- 四、Kubectl create 加載 yaml 檔案生成 deployment
- 1.生成 mysql-deployment.yaml 檔案
- 2.使用 mysql-deployment.yaml 創建和洗掉 mysql 資源
- 3.使用 get 引數查看 pod 詳細資訊
- 4.使用 describe 查看 k8s 中詳細資訊
- 五、Kubectl 其他常用命令和引數說明
- 1.Kubectl logs
- 2.Kubectl exec
- 3.Kubectl attach
- 六、使用 Kubectl 管理集群中 deployment 資源和 service 服務
- 1.生成 nginx-deployment.yaml 資源和 nginx-svc.yaml 服務的組態檔
- 2.創建 deployment 和 serveice
準備作業:
- 如果未部署 Kubernetes 容器集群管理系統需看:部署 Kubernetes 容器集群管理系統 來進行部署,
- 該實驗所需軟體包從這個鏈接下載:https://pan.baidu.com/s/1cNdRaG5bIHr2YNo47-N1Fw
- 提取碼:ozfk
一、Kubectl 概述
Kubectl 是一個用于操作 kubernetes 集群的命令列介面,通過利用 Kubectl 的各種命令可以實作各種功能,
二、Kubectl 創建和洗掉一個 pod 相關操作
| 命令 | 說明 |
|---|---|
| run | 在集群上運行一個 pod |
| create | 使用檔案或標準輸入的方式創建一個 pod |
| delete | 使用檔案或者標準輸入以及資源名稱或者標簽選擇器來洗掉某個 pod |
1.在集群上運行一個鏡像
將 docker.io-nginx.tar 和 pod-infrastructure.tar 上傳到 node1 和 node2 上并匯入鏡像
node1,node2操作一致:
[root@node1 ~]# ls
anaconda-ks.cfg k8s-package pod-infrastructure.tar
docker.io-nginx.tar k8s-package.tar.gz
[root@node1 ~]# docker load -i docker.io-nginx.tar
[root@node1 ~]# docker load -i pod-infrastructure.tar

2.Kubectl run 語法
Kubectl run 和 Docker run 一樣,Kubectl run 能將一個 pod 運行起來,
- 格式:
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas]
在 master上 啟動 pod:
[root@master ~]# kubectl run nginx-1 --image=docker.io/nginx --replicas=1 --port=9000

查看 Deployment:
[root@master ~]# kubectl get deployment

查看生成的 pod,kubernetes 將容器運行在 pod 中以方便實施卷和網路共享等管理
[root@master ~]# kubectl get pods

3.pods 常見的狀態
- ContainerCreating:容器正在創建,
- ImagePullBackOff:從后端把鏡像拉取到本地時中斷,
- terminating:終止;當洗掉 pod 時的狀態,
- Running:正常運行的狀態,
3.使用 Kubectl delete 洗掉創建的物件
1)洗掉 pod
[root@master ~]# kubectl delete pod nginx-1-2637872784-5kg5l
[root@master ~]# kubectl get pod

過 2 分鐘左右,再次確認,發現已經運行

2)洗掉 deployment
直接洗掉 pod 觸發了 replicas 的確保機制,所以需要洗掉 deployment
[root@master ~]# kubectl delete deployment nginx-1
[root@master ~]# kubectl get pod

三、yaml 語法規則
YAML 語言的設計目標,就是方便人類讀寫,它實質上是一種資料串行化格式,
1.yaml 語法的基本語法規則
- 大小寫敏感,
- 使用縮進表示層級關系,
- 縮進時不允許使用 Tab 鍵,只允許使用空格,
- 縮進的空格數目不重要,只要相同層級的元素左側對齊即可,
- " # " 表示注釋,從這個字符一直到行尾,都會被決議器忽略,
- 在 yaml 里面,連續的專案(如:陣列元素、集合元素)通過減號 " - " 來表示,map 結構里面的鍵值對(key/value)用冒號 " : " 來分割,
2.yaml 支持的三種資料結構
- 物件:鍵值對的集合,又稱為映射(mapping)/哈希(hashes)/字典(dictionary),
- 陣列:一組按次序排列的值,又稱為序列(sequence)/串列(list),
- 純量(scalars):單個的、不可再分的值,
四、Kubectl create 加載 yaml 檔案生成 deployment
使用 Kubectl run 在設定很復雜的需求時,需要非常長的一條陳述句,也很容易出錯,也沒法保存,所以更多場景下會使用 yaml 或者 json 檔案,
1.生成 mysql-deployment.yaml 檔案
上傳 docker.io-mysql-mysql-server.tar 到 node1 和 node2 上
node1,node2操作一致
[root@node1 ~]# docker load -i docker.io-mysql-mysql-server.tar

[root@master ~]# vim mysql-deployment.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: mysql
spec:
replicas: 1
template:
metadata:
labels:
name: mysql
spec:
containers:
- name: mysql
image: docker.io/mysql/mysql-server
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
protocol: TCP
env:
- name: MYSQL_ROOT_PASSWORD
value: "123123"

2.使用 mysql-deployment.yaml 創建和洗掉 mysql 資源
[root@master ~]# kubectl create -f mysql-deployment.yaml

- 注意:當一個目錄下,有多個 yaml 檔案的時候,使用
kubectl create -f 目錄的方式一下全部創建,
3.使用 get 引數查看 pod 詳細資訊
[root@master ~]# kubectl get pod
[root@master ~]# kubectl get deployment

加上 -o wide 引數可以查看更詳細的資訊,比如想看到此 pod 在哪個 node 上運行,此 pod 的集群 IP 是多少也會顯示,
[root@master ~]# kubectl get pod -o wide

- 注意:10.255.5.2 這個IP地址是 flannel 中定義的網段中的一個IP地址,pod 通過這個 IP 和 master 進行通信
在 node2 上查看運行 mysql docker 實體:
[root@node2 ~]# docker ps

4.使用 describe 查看 k8s 中詳細資訊
- 查看 pod 的詳細描述資訊:kubectl describe pod pod名字
- 查看 node 的詳細描述資訊:kubectl describe node node名字
- 查看 deployment 的詳細描述資訊:kubectl describe deployment deployment名字
五、Kubectl 其他常用命令和引數說明
| 命令 | 說明 |
|---|---|
| logs | 取得 pod 中容器的 log 資訊 |
| exec | 在 pod 中執行一條命令 |
| cp | 從容器拷出或向容器拷入檔案 |
| attach | attach 到一個運行中的容器上,實時查看容器訊息 |
1.Kubectl logs
類似于 Docker logs,使用 Kubectl logs 能夠取出 pod 中鏡像的 log,也是故障排除時候的重要資訊,
[root@master ~]# kubectl get pod
[root@master ~]# kubectl logs mysql-2388517676-588kb

2.Kubectl exec
exec 命令用于到 pod 中執行一條命令,
[root@master ~]# kubectl get pod
[root@master ~]# kubectl exec -it mysql-2388517676-588kb bash
bash-4.2# exit

3.Kubectl attach
attach 用于取得 pod 中容器的實時資訊,可以持續不斷實時的取出訊息,
[root@master ~]# kubectl attach mysql-2388517676-588kb

- 注意: 到現在,所創建 nginx 和 mysql 都只是 deployment 設備硬體資源,并沒有對應 service 服務,所以現在還不能能直接在外網進行訪問 nginx 和 mysql 服務,
六、使用 Kubectl 管理集群中 deployment 資源和 service 服務
1.生成 nginx-deployment.yaml 資源和 nginx-svc.yaml 服務的組態檔
使用 Deployment 方式啟動 nginx 的 pod 和 service
[root@master ~]# vim nginx-deployment.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: nginx
spec:
replicas: 1
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx
image: docker.io/nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
protocol: TCP

[root@master ~]# vim nginx-svc.yaml #創建 service
kind: Service
apiVersion: v1
metadata:
name: nginx
labels:
name: nginx
spec:
type: NodePort
ports:
- protocol: TCP
nodePort: 31001
targetPort: 80
port: 80
selector:
name: nginx

2.創建 deployment 和 serveice
[root@master ~]# kubectl create -f nginx-deployment.yaml
[root@master ~]# kubectl create -f nginx-svc.yaml

查看:
[root@master ~]# kubectl get service
或者
[root@master ~]# kubectl get svc

查看詳細資訊:
[root@master ~]# kubectl get pod -o wide

- 注意:發現 nginx 容器中的 80 埠已經映射到 node(Minion 物理機)節點的 31001 埠上了,可以查看到 nginx 服務已經運行在 node1 上,
使用瀏覽器訪問測驗:

盡管 nginx 的 pod 是在 node1 運行的,但我們去訪問任意 node,都可以正常訪問 nginx 的,已經做了負載均衡,所以在 node2 上也可以成功訪問 web 服務,

修改一下默認主頁:
[root@master ~]# kubectl get pod
[root@master ~]# kubectl exec -it nginx-1011335894-shsfx bash
root@nginx-1011335894-shsfx:/# echo Nginx > /usr/share/nginx/html/index.html
root@nginx-1011335894-shsfx:/# exit

使用瀏覽器訪問測驗:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/233986.html
標籤:其他
