K8s(2)-部署應用

 

     一旦運行了Kubernetes集羣,就能夠在其上部署容器化應用程序。爲此,您須要建立Kubernetes Deployment配置。Deployment指示Kubernetes如何建立和更新應用程序的實例。建立Deployment後,Kubernetes調度組件將應用程序實例提到集羣中的各個節點上。node

建立應用程序實例後,Kubernetes Deployment Controller會持續監視這些實例。若是託管實例的節點關閉或被刪除,則Deployment控制器會替換它。這提供了一種自我修復機制來解決機器故障或維護問題。linux

 

 

1. 檢查kubectl配置是否正常
[root@master ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.2", GitCommit:"cff46ab41ff0bb44d8584413b598ad8360ec1def", GitTreeState:"clean", BuildDate:"2019-01-10T23:35:51Z", GoVersion:"go1.11.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.2", GitCommit:"cff46ab41ff0bb44d8584413b598ad8360ec1def", GitTreeState:"clean", BuildDate:"2019-01-10T23:28:14Z", GoVersion:"go1.11.4", Compiler:"gc", Platform:"linux/amd64"}

  

2. 查看集羣中工做節點

    這裏只有一個控制節點做爲工做節點,注意要去掉控制節點的污點。api

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE    VERSION
master   Ready    master   2d8h   v1.13.2

  

3. 部署應用

  經過建立一個部署(deployment),部署一個應用bash

[root@master ~]# kubectl run kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v1 --port=8080
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/kubernetes-bootcamp created
  •   部署的名字: kubernetes-bootcamp
  •        鏡像地址: jocatalin/kubernetes-bootcamp:v1
  •        Pod的端口: 8080

這個操做會在後臺進行下面的動做:服務器

  1. 尋找一個合適的節點可以運行應用實例
  2. 調度該節點運行應用程序
  3. 當須要時,從新分配一個節點運行程序

 

4. 查看部署

    咱們看到有1個部署正在運行應用程序的單個實例網絡

[root@master ~]# kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1/1     1            1           26m

  

5. 訪問應用

    Pods運行在k8s的內部網絡,他們可以被同一個集羣的Pods訪問,可是不能被外部網絡訪問。app

 kubectl命令能夠建立一個代理,將通訊轉發到集羣範圍的專用網絡中。代理能夠經過按control-c終止,而且在運行時不會顯示任何輸出。curl

  咱們將打開第二個終端窗口來運行代理。ui

[root@master ~]# kubectl proxy 
Starting to serve on [::]:8001

  

api服務器將根據pod名稱自動爲每一個pod建立一個端點,該端點也能夠經過代理訪問。url

首先,咱們須要獲取pod名稱,而後將其存儲在環境變量pod_name中:

export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME

  

經過pod的名稱訪問應用

[root@master ~]# curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-7f56b875dc-6zbjt | v=1
相關文章
相關標籤/搜索