雲原生應用8:Kubernetes基礎用法

kubernetes有兩種類型的節點 master 與 node 節點,master負責調度任務,node也叫worker節點,負責具體運算,默認使用docker容器運行時
master上有4大組件:Api-Server、Scheduler、Etcd、ControllerManager
worker上有2大組件:kubelet、kube-proxy、docker

1.k8s具體工作情況如下:

k8s通過 kubectl 客戶端向 api-server 發送請求,我要創建一個容器,api-server會把記錄存儲 etcd,同時向 scheduler 調度器發請求,scheduler 通過一系列分析得出可以在那個 node 節點有資源,能創建容器,把信息反饋給api-server,api-server記錄到 etcd 中,api-server給該node 節點的 kubelet 發送請求,讓 kubelet 調用本節點的容器運行時創建容器,ControllerManager 控制器會監控容器是否正常運行,並保證它正常運行

在K8s中,容器運行在Pod中,Pod中可以有多個容器,多個容器可使用localhost訪問對方,一般一個Pod運行一個容器

2.k8s創建容器有兩種方式
  • 1.通過 kubectl run 命令
  • 2.通過配置清單文件,然後使用 kubectl create/apply -f xxx.yaml

下面使用這兩種編排容器方式,演示 nginx 如何創建,而安裝好k8s集羣,輸入 kubectl 命令,查看幫助文檔,裏面有 kubectl 操作 k8s 集羣的各種命令,而kubectl run 就是基於命令創建容器的一種簡單方式

在這裏插入圖片描述

3.使用 kubectl run 命令創建 nginx pod

在命令行輸入:kubectl run --help,可看到幫助文檔提供的語法格式,提供了多個屬性,每個屬性都有英文註釋
在這裏插入圖片描述

使用: kubectl run nginx --image=nginx --replicas=2 --port=80 命令創建名爲 nginx 的 deployment 控制器,鏡像爲nginx,創建2個實例,綁定容器的80端口
查看deploy:kubectl get deploy
查看Pod:kubectl get pods
查看Pod的 IP:kubectl get pods -o wide
查看Pod的詳細內容:kubectl inspect nginx-7c45b84548-b2m5j

可以看到 nginx 的狀態爲 Running 表示運行起來了,有 IP,NODE等信息,在集羣內使用curl命令訪問
curl 10.244.1.9 訪問nginx的主頁,主頁內容正確返回了,這是內網IP,只能在集羣內訪問,無法在外網訪問

在這裏插入圖片描述
要在集羣外訪問 nginx,需要使用 kubectl expose --help 命令,暴露一個 Service 服務,請求代理到容器
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort
在這裏插入圖片描述
Type=NodePort,表示監聽宿主機端口,通過kubectl get svc,可以看到 nginx service的Port,內網是80,外網是30733,也就是說,通過內外網訪問nginx
內網訪問:curl 10.106.143.0
外網訪問:在瀏覽器中輸入任意節點IP + 30733
在這裏插入圖片描述

4.使用配置清單文件創建 nginx pod

使用 kubectl run 命令創建的容器,其實最後也轉換成了 yaml 格式的配置文件

  • 1.通過 kubectl get pods 查看 nginx pod
  • 2.把其中某個pod輸出爲 yaml 格式,kubectl get pods nginx-7c45b84548-b2m5j -o yaml
    在這裏插入圖片描述
    刪除kubectl run 命令創建的 pod,重新通過配置清單的方式創建Pod
  • 3.該nginx pod是一個deployment控制器,刪除deploy即可,kubectl get deploy,然後kubectl delete deploy nginx,刪除Service,kubectl delete svc nginx
  • 4.把上面通過 kubectl get pods nginx-7c45b84548-b2m5j -o yaml 的配置內容複製到一個名爲 nginx-deploy.yaml的文件中,只複製部分內容就好
    vi nginx-deploy.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 1
  selector:
    app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
  • 5.創建Pod,kubectl apply -f nginx-deploy.yaml

  • 6.查看Pod,kubectl get pods -o wide,再通過內網 IP 訪問

  • 7.暴露到外網:kubectl expose rc nginx --port=80 --target-port=80 --type=NodePort

  • 8.查看Service:kubectl get svc ,CLUSTER-IP變了,監聽宿主機的端口也變成了30789
    在這裏插入圖片描述
    在這裏插入圖片描述
    通過任意Node節點的IP + 30789 訪問 nginx 主頁,之前 192.168.68.149,現在是 192.168.68.151

  • 9.擴容與縮容,通過 kubectl scale --help 完成自動擴容,kubectl scale --replicas=2 -f nginx-deploy.yaml
    在這裏插入圖片描述

本篇介紹瞭如何通過 k8s run命令和 清單配置文件創建Pod,k8s run 命令可以跑一些簡單的測試容器,通過配置文件可以創建更定製化的容器

最重要的是如何查看幫助文檔,通過 kubectl ,得到一個幫助文檔列表,然後

kubectl create --help
kubectl run --help
kubectl expose --help
等等,次列表中的任意命令的語法格式都可以查看幫助文檔來操作

配置清單文件的語法格式,k8s也提供了幫助文明,kubectl explain 命令

kubectl explain pods
kubectl explain pods.spec
kubectl explain pods.spec.containers 可以一層層進去

kubectl explain service
k8s怎麼操作,看文檔會有很大的幫助

下面彙總一些常用的kubectl操作命令

查看所有Pod列表:kubectl get pods
查看RC和Service:kubectl get rc,service
查看Pod詳細內容:kubectl describe pods < pod-name >
查看Node詳細內容:kubectl describe nodes < node-name >
創建或更新資源:kubectl apply -f xxx.yaml
刪除資源:kubectl delete -f xxx.yaml
執行容器中date命令:kubectl exec < pod-name > date
查看容器日誌:kubectl logs < pod-name >
在線編輯運行中的資源:kubectl edit deploy nginx
在Pod和本地之間複製文件:kubectl cp nginx-xxxx:/etc/fstab /tmp
資源對象設置標籤:kubectl label pods < pod-name > frontend=release
查看Pod的label標籤:kubectl get pods --show-labels

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