Kubernetes(K8s)極速入門

追風人聊Java 發表於 2021-11-26
k8s Kubernetes

1. 概述

老話說的好:努力學習,努力提高,做一個有真才實學的人。

 

言歸正傳,之前我們聊了 如何使用國內的映象源搭建 kubernetes(k8s)叢集 ,今天我們來聊聊如何在 kubernetes(k8s)上部署容器。

 

官網教程:https://kubernetes.io/docs/home/

 

2. 部署 Pod

2.1 概述

Pod 是 kubernetes(k8s)的最小單元,一個 Pod 中可部署多個容器,這裡我們以部署 Nginx 為例,先介紹一下 kubernetes(k8s)的編排指令碼。

 

2.2 Pod 指令碼例子

新建一個指令碼,名為 my-pod.yml

# vi my-pod.yml

apiVersion: v1
kind: Pod
metadata:
  name: my-nginx
spec:
  containers:
  - name: my-nginx
    image: nginx

apiVersion:指令碼的版本,Pod 通常使用 v1 這個版本

kind:指令碼的型別,這裡就是 Pod

metadata.name:Pod 的名稱

spec.containers:Pod 中執行的容器,可以是多個

 

注意:下級相對上級縮排兩個空格,而不是Tab。

 

2.3 執行指令碼

# kubectl apply -f my-pod.yml

 

2.4 檢視 pod 資訊

# kubectl get pod -o wide

Kubernetes(K8s)極速入門

 ContainerCreating 狀態代表 pod 正在新增 

 

Kubernetes(K8s)極速入門

  Running 狀態代表 pod 已經執行

 

2.5 檢視 pod 詳細資訊
# kubectl describe pod my-nginx

 

2.6 刪除 pod

# kubectl delete pod my-nginx

 

3. 部署 Deployment

3.1 概述

在 kubernetes(k8s)中, 使用 Pod 指令碼部署 pod,只能單節點部署,無法高可用。

因此需要用到 Deployment ,Deployment 可以指定 Pod 的副本數,通常情況是使用 Deployment  部署。

 

3.2 Deployment 指令碼例子

新建一個指令碼,名為 my-deployment.yml

# vi my-deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-deployment
  template:
    metadata:
      labels:
        app: nginx-deployment
    spec:
      containers:
      - name: my-nginx
        image: nginx

spec.replicas:部署 Pod 的副本數

sepc.template.metadata.labels.app:deployment 標籤名稱。

 

3.3 執行指令碼

# kubectl apply -f my-deployment.yml

 

3.4 檢視 deployment 資訊

# kubectl get deployment

Kubernetes(K8s)極速入門

 

# kubectl get pod -o wide

Kubernetes(K8s)極速入門

 

3.5 檢視 deployment 詳細資訊

# kubectl describe deployment nginx-deployment

 

3.6 刪除 deployment

# kubectl delete deployment nginx-deployment

 

4. 部署 Service

4.1 概述

上一步我們使用 deployment 部署了多個 Pod 例項,但我們無法訪問到 Pod 中的 Nginx。

此時就要藉助 Service。

 

4.2 Service 指令碼例子

新建一個指令碼,名為 my-service.yml

# vi my-service.yml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx-deployment
  ports:
  - protocol: TCP
    nodePort: 30000
    port: 20000
    targetPort: 80

spec.type:Service 的型別,NodePort 是埠對映的方式,就是把容器的埠對映到宿主機的埠。

spec.selector.app:作用於哪個 deployment 標籤。

spec.ports:是埠對映設定,targetPort 是容器中服務真實的埠,Nginx預設使用 80 埠,port 是Service 對外暴露的埠,用於 K8s 內部訪問,nodePort 是對映的宿主機的埠。

 

4.3 執行指令碼

# kubectl apply -f my-service.yml

 

4.4 檢視 Service 資訊

# kubectl get service -o wide

Kubernetes(K8s)極速入門

 

 

4.5 檢視 Service 詳細資訊

# kubectl describe service nginx-service

Kubernetes(K8s)極速入門

 

 

4.6 刪除 Service

# kubectl delete service nginx-service

 

4.7 訪問 Nginx

地址:http://宿主機IP:30000

例如:http://192.168.1.12:30000/

Kubernetes(K8s)極速入門

 

 

5. 綜述

今天聊了一下 kubernetes(k8s)叢集上是如何部署容器的,希望可以對大家的工作有所幫助。

歡迎幫忙點贊、評論、轉發、加關注 :)

關注追風人聊Java,每天更新Java乾貨。

 

6. 個人公眾號

追風人聊Java,歡迎大家關注

Kubernetes(K8s)極速入門