一旦運行了Kubernetes集群,就可以在其上部署容器化應用程序。為此,您需要創建Kubernetes Deployment配置。Deployment指示Kubernetes如何創建和更新應用程序的實例。創建Deployment后,Kubernetes調度組件將應用程序實例提到集群中的各個節點上。
創建應用程序實例后,Kubernetes Deployment Controller會持續監視這些實例。如果托管實例的節點關閉或被刪除,則Deployment控制器會替換它。這提供了一種自我修復機制來解決機器故障或維護問題。
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. 查看集群中工作節點
這里只有一個控制節點作為工作節點,注意要去掉控制節點的污點。
[root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 2d8h v1.13.2
3. 部署應用
通過創建一個部署(deployment),部署一個應用
[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
這個操作會在后台進行下面的動作:
- 尋找一個合適的節點能夠運行應用實例
- 調度該節點運行應用程序
- 當需要時,重新分配一個節點運行程序
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訪問,但是不能被外部網絡訪問。
kubectl命令可以創建一個代理,將通信轉發到集群范圍的專用網絡中。代理可以通過按control-c終止,並且在運行時不會顯示任何輸出。
我們將打開第二個終端窗口來運行代理。
[root@master ~]# kubectl proxy Starting to serve on [::]:8001
api服務器將根據pod名稱自動為每個pod創建一個端點,該端點也可以通過代理訪問。
首先,我們需要獲取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