iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
0
自我挑戰組

Cloud/SDN/SFC...菜鳥的學習筆記系列 第 7

Day7 菜鳥的Kubernetes紀錄-Kubernetes建立Pod、Service、 Deployment

  • 分享至 

  • xImage
  •  

今天紀錄是如何建立Pod、Service、Deployment,這些都是kubernetes常見的元件也是最基礎的原件。後面還會參雜指令的功能。另外有關yaml的部分我就不在這裡寫介紹了。

Pod使用

Kubernetes運作的最小單位,一個服務會在一個Pod內。

建立pod_demo.yaml

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']

通過yaml創建Pod

kubectl apply -f pod_demo.yaml #這行是如果有改yaml就會將改後的yaml取代當前執行的yaml,如果沒有存在這個yaml就會創建。
#或
kubectl create -f pod_demo.yaml #直接創建yaml所寫的資源,不會覆蓋當前資源

查看pod的是否成功執行

查看pod是否有Running

kubectl get pod
NAME        READY   STATUS    RESTARTS   AGE
myapp-pod   1/1     Running   0          3m52s

可以查看pod詳細內容,看有沒有成功。

# kubectl describe pod  <pod的NAME>
kubectl describe pod  myapp-pod

使用log看資訊,因我的yaml會輸出Hello Kubernetes!,所以可以看看log有沒有這行。

# kubectl logs <pod的NAME>
kubectl logs myapp-pod

Service使用

Service的作用就是讓Cluster中的Pod與外部互相溝通。ps:我的範例並沒有通過label去連接Pod,這裡只有單純的創建和查詢,所以只有看Service有沒有被創建。

建立service_test.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
---
apiVersion: v1
kind: Service
metadata:
  name: mydb
spec:
  ports:
    - protocol: TCP
      port: 89
      targetPort: 9377

通過yaml創建Service

kubectl apply -f service_test.yaml
#或是
kubectl create -f service_test.yaml

查看Service

 kubectl get service
 #或著
 kubectl get svc


查看全部Service詳細資訊

kubectl describe service
#或著
kubectl describe svc 

查看指定的Service詳細資訊

kubectl describe service <Service的NAME>
 #或著
 kubectl get svc <Service的NAME>

Deployment的使用

Deployment為pod和replicaset提供了設定的方式,官方也說Pod和replicaset推薦使用Deployment來部屬會比較好,Deployment有著同步、滾動更新、回滾等功能。這裡也是只有簡單的範例。

建立deployment_test.yaml

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

使用yaml建立deployment

kubectl apply -f deployment_test.yaml

查看透過deployment建立的pod

kubectl get pod

除了剛剛測試的pod外,我在deployment_test.yaml內的replicas設定了3,因此會有三個pod。

刪除一個pod,會再生成一個pod

#kubectl delete pod <pod的NAME>
kubectl delete pod nginx-deployment-54f57cf6bf-9j6vk

查看pod會發現,新生成了一個Pod,因為replicas為3代表deployment產生的pod會保持三個,當有crash或是被刪除一個會再重啟一個pod,以保持三個pod的情況。

滾動更新

當我跟改了deployment內pod的設定,他不會馬上將所有pod更改,會先保留當前的版本,然後再去建立新版本的pod,當確定新版本的pod的成功Running後會再將舊的pod刪除。

  1. deployment_test.yaml更改後
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.8.1
        ports:
        - containerPort: 80
  1. 覆蓋當前的deployment
kubectl apply -f deployment_test.yaml
  1. 查看pod
kubectl get pod


上一篇
Day6 菜鳥的Kubernetes紀錄-安裝Kubernetes
下一篇
Day8 菜鳥的Kubernetes紀錄-Kubernetes建部屬Jenkins
系列文
Cloud/SDN/SFC...菜鳥的學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言