kubernetes之三 使用kubectl在k8s上部署應用


上一篇中,我們學習了使用minikube來搭建k8s集群。k8s集群啟動后,就可以在上面部署應用了。本篇,我們就來學習如何使用kubectl在k8s上部署應用。學習之前,可以先從下面這篇博客上了解到部署方式有多種:

關於kubernetes的部署方式:Kubernetes的幾種主流部署方式01-minikube部署

關於minikube和kubeadm部署方式的區別可以參考:Kubernetes的幾種主流部署方式02-kubeadm部署高可用集群 

 

官方文檔:Using kubectl to Create a Deployment (Hello Minikube)

一、創建deployment

1.使用kubectl create命令創建一次部署,該部署用於管理Pod

kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node

2.查看部署

kubectl get deployments

3.查看pod

kubectl get pods

4.查看集群事件

kubectl get events

5.查看kubectl配置

kubectl config view

二、對外暴露服務

默認情況,pod僅能在集群內網中通過內網ip訪問。如果要通過外網訪問,需要將pod暴露成kubernetes服務。

暴露服務

1.使用kubectl expose命令將pod暴露到公網

kubectl expose deployment hello-node --type=LoadBalancer --port=8080

The --type=LoadBalancer flag indicates that you want to expose your Service outside of the cluster.

2.查看服務

[peng@cent99 ~]$ kubectl get services
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
hello-node   LoadBalancer   10.101.254.43   <pending>     8080:31492/TCP   3d19h
kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP          5d17h

3.查看下對外暴露的端口(NodePort選項)

[peng@cent99 ~]$ kubectl describe services/hello-node
Name:                     hello-node
Namespace:                default
Labels:                   app=hello-node
Annotations:              <none>
Selector:                 app=hello-node
Type:                     LoadBalancer
IP:                       10.101.254.43
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  31492/TCP
Endpoints:
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

4.

minikube service hello-node

??這個我沒有成功,彈出瀏覽器后無法訪問?? 

 

使用標簽 

部署會自動為pod創建一個標簽,使用describe deploymen命令可以查看標簽的名稱

我們用這個標簽來查詢pod列表

[peng@cent99 ~]$ kubectl get pods -l app=hello-node
NAME                          READY   STATUS             RESTARTS   AGE
hello-node-55b49fb9f8-s2x8f   0/1     ImagePullBackOff   0          3d19h

同樣,我們可以使用這個標簽來查詢service列表

[peng@cent99 ~]$ kubectl get services -l app=hello-node
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
hello-node   LoadBalancer   10.101.254.43   <pending>     8080:31492/TCP   3d19h

使用kubectl label命令創建新標簽

[peng@cent99 ~]$ export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
[peng@cent99 ~]$ echo Name of the Pod: $POD_NAME
Name of the Pod: hello-node-55b49fb9f8-s2x8f

[peng@cent99 ~]$ kubectl label pod $POD_NAME run=v1
pod/hello-node-55b49fb9f8-s2x8f labeled

使用新創建的標簽來查詢

[peng@cent99 ~]$ kubectl get pods -l run=v1
NAME                          READY   STATUS             RESTARTS   AGE
hello-node-55b49fb9f8-s2x8f   0/1     ImagePullBackOff   0          3d20h

 

三、查看Pod和Node的信息

官方教程:Viewing Pods and Nodes

Pod代表了一組(單個或多個)容器和它們共享的資源,這些資源包括:
  • 共享的存儲, 例如Volumes
  • 網絡, 例如唯一的集群ip地址 
  • 每個容器如何運行相關的一些信息,例如容器鏡像的版本或者使用的唯一端口

Pod總是運行在Node中,Node可以是一台物理機,也可以是虛擬機。每個Pod都由Master管理,一個Node可以操縱多個Pod。Master會自動調度集群中跨節點的Pod,Master的自動調度會考慮每個節點上的可用資源。

每個節點都至少會運行Kubelet和容器運行時。

  • Kubelet, a process responsible for communication between the Kubernetes Master and the Node; it manages the Pods and the containers running on a machine.
  • A container runtime (like Docker, rkt) responsible for pulling the container image from a registry, unpacking the container, and running the application.

 

 

 

下面的kubectl命令可以完成大多數常用的操作:

  • kubectl get - 列出資源
  • kubectl describe - 顯示資源詳情
  • kubectl logs - 打印pod中的容器的日志
  • kubectl exec - 向pod中的容器執行命令

通過這些命令,我們可以查看應用何時部署,當前運行狀態,運行位置,和相關的配置信息

 

查看資源對象
kubectl get

#查看所有pod列表
kubectl get pods   
#查看rc列表
kubectl get rc      
#查看service列表
kubectl get service 

 

描述資源對象詳細信息
kubectl describe

#顯示node的詳細信息
kubectl describe nodes [node名]
#顯示pod的詳細信息
kubectl describe pods/[pod名]
#顯示由RC管理的pod的信息
kubectl describe pods [rc名]

 

執行容器的命令
kubectl exec

#執行pod的date命令,默認使用pod中的第1個容器執行
kubectl exec <pod名> date                  
#指定pod中某個容器執行date命令
kubectl exec <pod名> -c <容器名> date            
#登錄容器執行命令
kubectl exec -it <pod名> -c <容器名>  /bin/bash

 

查看容器的日志
kubectl logs

#查看容器輸出到stdout的日志
kubectl logs <pod名> 
#跟蹤查看容器的日志,相當於tail -f命令的結果
kubectl logs -f <pod名> -c <容器名>

 


免責聲明!

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



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