【kubernetes入门学习】使用kubectl在k8s上部署应用

上一篇中,我们学习了使用minikube来搭建k8s集群。k8s集群启动后,就可以在上面部署应用了。本篇,我们就来学习如何使用kubectl在k8s上部署应用。

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

一、使用kubectl部署应用

1.创建deployment

使用kubectl create命令创建一次部署,该部署用于管理Pod

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

查看部署

kubectl get deployments

查看pod

kubectl get pods

查看集群事件

kubectl get events

查看kubectl配置

kubectl config view

 

2.对外暴露服务

默认情况,pod仅能在集群内网中通过内网ip访问。如果要通过外网访问,需要将pod暴露成kubernetes服务。

1)暴露服务

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

这个我没有成功,弹出浏览器后无法访问?? 

 

2)使用标签 

部署会自动为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

 

二、kubectl的基本操作

1.查看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 <容器名>

 

2.水平伸缩

【水平伸缩】

#查看部署
kubectl get deployments
#查看副本集(ReplicaSet)
kubectl get rs

#扩容
kubectl scale deployments/kubernetes-bootcamp --replicas=4
#重新查看部署
kubectl get deployments
#查看pod数是否改变
kubectl get pods -o wide
#查看一下日志,输出中会有4个副本
kubectl describe deployments/kubernetes-bootcamp

 

3.升级应用

6.升级应用
使用 kubectl 执行滚动更新

#查看下部署
kubectl get deployments

#列出正在运行的pod
kubectl get pods

#查看一下应用的当前镜像的版本
kubectl describe pods

#版本升级到v2
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2

#重新列出正在运行的pod
kubectl get pods

 

posted @ 2019-09-12 23:59  静水楼台/Java部落阁  阅读(1585)  评论(1编辑  收藏  举报