項目環境搭建【Docker+k8s】十 || kubernetes資源配置運行容器



經過上文的創建文件測試可以感受到,通過run命令啟動容器非常麻煩。其中docker提供了compose解決了這個問題,而kubernetes使用kubectl create命令就可以做到和compose一樣的效果,該命令可以通過配置文件快速創建一個集群資源對象。

1、部署Deployment

創建一個名為nginx-deployment.yml的配置文件,以創建nginx服務為例進行說明

注意:各版本配置文件內容有所不同,具體請參照官方文檔
(例:v1.15版本apiVersion為extensions/v1beta1,在v1.16在這個版本中Deployment已經從extensions/v1beta1 棄用,更改為apps/v1)。

#API 版本號
apiVersion: apps/v1
#類型,如:Pod/ReplicationController/Deployment/Service/Ingress
kind: Deployment
#元數據
metadata:
  #Kind 的名稱
  name: nginx-app
spec:
  selector: #定義標簽選擇器
    matchLabels:
      app: nginx
  #部署的實例數量
  replicas: 2
  template:
    metadata:
      labels:
        #容器標簽的名字,發布 Service 時,selector 需要和這里對應
        app: nginx
    spec:
      #配置容器,數組類型,說明可以配置多個容器
      containers:
      #容器名稱
      - name: nginx
        #容器鏡像,不能使用latest
        image: nginx:1.17
        imagePullPolicy: IfNotPresent
        #暴露端口
        ports:
        #Pod 端口
        - containerPort: 80

鏡像拉取策略,支持三種ImagePullPolicy:

  • Always:不管鏡像是否存在都會進行一次拉取
  • Never:不管鏡像是否存在都不會進行拉取
  • IfNotPresent:只有鏡像不存在時才會拉取鏡像

注意:

  • 默認為IfNotPresent,而latest標簽的鏡像默認為Always
  • 拉取鏡像時docker會進行校驗,如果鏡像中的MD5沒有變化,則不會拉取鏡像數據
  • 生產環境中應該避免使用latest標簽,而開發環境可以借助latest標簽自動拉取最新的鏡像

創建資源對象

[root@yn101-22 service]# kubectl create -f nginx-deployment.yml
#輸出如下:
deployment.apps/nginx-app created
#查看Pods狀態
[root@yn101-22 service]# kubectl get pods
NAME                         READY   STATUS    RESTARTS   AGE
nginx-app-798dcc9989-vs862   1/1     Running   0          3m47s
nginx-app-798dcc9989-xzg4x   1/1     Running   0          3m47s
#查看已部署的服務
[root@yn101-22 service]# kubectl get deployment
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
nginx-app   2/2     2            2           4m20s
#查看已發布的服務
[root@yn101-22 service]# kubectl get service
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   12h

2、部署Service

以上配置僅部署了服務,還未運行容器,因此,需要發布服務配置。先停止上一步部署的Deployment

[root@yn101-22 service]# kubectl delete -f nginx-deployment.yml
#輸出如下:
deployment.apps "nginx-app" deleted

創建一個名為nginx.yml的配置文件,完整配置內容如下:

#API 版本號
apiVersion: apps/v1
#類型,如:Pod/ReplicationController/Deployment/Service/Ingress
kind: Deployment
#元數據
metadata:
  #Kind 的名稱
  name: nginx-app
spec:
  selector: #定義標簽選擇器
    matchLabels:
      app: nginx
  #部署的實例數量
  replicas: 2
  template:
    metadata:
      labels:
        #容器標簽的名字,發布 Service 時,selector 需要和這里對應
        app: nginx
    spec:
      #配置容器,數組類型,說明可以配置多個容器
      containers:
      #容器名稱
      - name: nginx
        #容器鏡像,不能使用latest
        image: nginx:1.17
        imagePullPolicy: IfNotPresent
        #暴露端口
        ports:
        #Pod 端口
        - containerPort: 80
 ---
apiVersion: v1
kind: Service #指明資源類型是 service
metadata: #元數據
  name: nginx-http #kind的名稱
spec:
  ports:
  - port: 80 #service暴露的端口
    targetPort: 80 #pod上的端口,將service暴露的短句轉發到pod端口上
  type: LoadBalancer
  selector:
    app: nginx #需要和上面部署的deployment標簽名對應

創建資源對象

[root@yn101-22 service]# kubectl create -f nginx.yml
#輸出如下
deployment.apps/nginx-app created
service/nginx-http created
#查看已發布的服務
[root@yn101-22 service]# kubectl get service
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP        13h
nginx-http   LoadBalancer   10.106.43.210   <pending>     80:30665/TCP   93s

由上可知,服務暴露端口為30665,在node節點進行驗證服務是否啟動成功。
分別訪問node-01節點(192.168.101.31:30665)和node-02節點(192.168.101.32:30665),能正常訪問nginx說明啟動服務成功。

刪除服務

[root@yn101-22 ~]# kubectl delete -f nginx.yml
#輸出如下:
deployment.apps "nginx-app" deleted
service "nginx-http" deleted


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM