本文收录在容器技术学习系列文章总目录

1、使用kubectl

1.1 介绍

kubectl用于运行Kubernetes集群命令的管理工具。

1.2 语法

kubectl [command] [TYPE] [NAME] [flags]
  •  command:指定要在一个或多个资源执行的操作,例如操作creategetdescribedeleteTYPE:指定资源类型Resource types
  •  Name区分大小写,如果省略Name,则显示所有资源的详细信息,例如:$ kubectl get pods

1.3 选项

1.4 示例演示

1)简单的查询操作

查询节点详细信息

[root@master ~]# kubectl describe node node1
Name:               node1
Roles:              <none>
Labels:             beta.kubernetes.io/arch=amd64
... ...

查看版本

[root@master ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"bb9ffb1654d4a729bb4cec18ff088eacc153c239", GitTreeState:"clean", BuildDate:"2018-08-07T23:17:28Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTreeState:"clean", BuildDate:"2018-07-17T18:43:26Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}

查看集群信息

[root@master ~]# kubectl cluster-info
Kubernetes master is running at https://192.168.10.103:6443
KubeDNS is running at https://192.168.10.103:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

  

2、run运行

2.1 介绍

创建并运行一个或多个容器镜像。

2.2 命令

$ kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]

  

2.3 常用选项

  •  --port:要暴露的端口
  •  --replicas:期望创建几个Pod,默认1
  •  --dry-runtrue为干跑

2.4 演示

1)运行一个nginxpod

[root@master ~]# kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1
deployment.apps/nginx-deploy created

  

2)在master上查询验证

[root@master ~]# kubectl get deployment
NAME           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deploy   1         1         1            1           44s
[root@master ~]# kubectl get pods
NAME                          READY     STATUS    RESTARTS   AGE
nginx-deploy-5b595999-6kw54   1/1       Running   0          51s
[root@master ~]# kubectl get pods -o wide
NAME                          READY     STATUS    RESTARTS   AGE       IP           NODE
nginx-deploy-5b595999-6kw54   1/1       Running   0          1m        10.244.2.2   node2

  

3)在部署的node节点上查询

[root@node2 ~]# ifconfig |head -2
cni0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 10.244.2.1  netmask 255.255.255.0  broadcast 0.0.0.0

  

4)访问pod内的nginx服务

[root@node1 ~]# curl 10.244.2.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

  

3、delete删除

3.1 介绍

  •  通过配置文件名、stdin、资源名称或label选择器来删除资源。
  •  支持JSONYAML格式文件。可以只指定一种类型的参数:文件名、资源名称或label选择器。

3.2 语法

$ kubectl delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])

  

3.3 演示

删除刚才的pod,立刻会生成一个新的pod,因为此pod是控制器管理的

[root@master ~]# kubectl delete pods nginx-deploy-5b595999-6kw54
pod "nginx-deploy-5b595999-6kw54" deleted
[root@master ~]# kubectl get pods
NAME                          READY     STATUS              RESTARTS   AGE
nginx-deploy-5b595999-jf5gm   0/1       ContainerCreating   0          16s
[root@master ~]# kubectl get pods -o wide
NAME                          READY     STATUS    RESTARTS   AGE       IP           NODE
nginx-deploy-5b595999-jf5gm   1/1       Running   0          47s       10.244.1.2   node1

  

4、expose暴露

4.1 介绍

  •  将资源暴露为新的Kubernetes Service
  •  指定deploymentservicereplica setreplication controllerpod ,并使用该资源的选择器作为指定端口上新服务的选择器。deployment  replica set只有当其选择器可转换为service支持的选择器时,即当选择器仅包含matchLabels组件时才会作为暴露新的Service
  •  资源包括(不区分大小写)podpo),servicesvc),replication controllerrc),deploymentdeploy),replica setrs

4.2 语法

$ kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]

  

4.3 常用选项

  •  --port:暴露在service上的端口
  •  --target-port:容器中的端口

4.4 演示

1)将nginx-deploy控制器中相关的Pod资源创建一个名为nginx的服务

[root@master ~]# kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP
service/nginx exposed
[root@master ~]# kubectl get services
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP   16h
nginx        ClusterIP   10.96.212.79   <none>        80/TCP    9s
[root@master ~]# kubectl get svc  #简写
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP   16h
nginx        ClusterIP   10.96.212.79   <none>        80/TCP    13s

  

2)验证,在集群内部节点访问服务

[root@master ~]# curl 10.96.212.79
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

  

3)删除pod,立即生产新的pod,但是service还是不变,继续提供服务,只是指定到新的pod

---删除pod
[root@master ~]# kubectl delete pods nginx-deploy-5b595999-jf5gm
---立即生产新的pod,service继续提供服务
[root@master ~]# curl 10.96.212.79
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
---指定到新的pod
[root@master ~]# kubectl get pod -o wide
NAME                            READY     STATUS    RESTARTS   AGE       IP            NODE
nginx-deploy-5b595999-2z769     1/1       Running   0          29m       10.244.1.2    node2
[root@master ~]# kubectl describe svc nginx
Name:              nginx
Namespace:         default
Labels:            run=nginx-deploy
Annotations:       <none>
Selector:          run=nginx-deploy
Type:              ClusterIP
IP:                10.96.212.79
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.1.2:80
Session Affinity:  None
Events:            <none>

  

5、scale动态扩容/缩容

5.1 介绍

  •  扩容或缩容 DeploymentReplicaSetReplication ControllerJob Pod数量。
  •  scale也可以指定多个前提条件,如:当前副本数量或 --resource-version ,进行伸缩比例设置前,系统会先验证前提条件是否成立。

5.2 语法

$ kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)

  

5.3 演示

1)先运行名为myapp标签选择器的2pod,镜像是我用于测试演示自己构建的

[root@master ~]# kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=2
deployment.apps/myapp created
[root@master ~]# kubectl get deployment
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
myapp     2         2         2            2           6s
[root@master ~]# kubectl get pods -o wide
NAME                     READY     STATUS    RESTARTS   AGE       IP            NODE
myapp-848b5b879b-58jcr   1/1       Running   0          11s       10.244.2.53   node2
myapp-848b5b879b-wpx9v   1/1       Running   0          11s       10.244.1.56   node1

  

2)创建service,并验证

[root@master ~]# kubectl expose deployment myapp --name=myapp --port=80
service/myapp exposed
[root@master ~]# kubectl get svc myapp
NAME      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
myapp     ClusterIP   10.104.205.158   <none>        80/TCP    8s
[root@master ~]# curl 10.104.205.158
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
---因为有2个pod,所以是随机调度
[root@master ~]# curl 10.104.205.158/hostname.html
myapp-848b5b879b-58jcr
[root@master ~]# curl 10.104.205.158/hostname.html
myapp-848b5b879b-wpx9v

  

3)使用scale,将pod扩容到5

[root@master ~]# kubectl scale --replicas=5 deployment myapp
deployment.extensions/myapp scaled
[root@master ~]# kubectl get pods
NAME                     READY     STATUS    RESTARTS   AGE
myapp-848b5b879b-2sj8n   1/1       Running   0          8s
myapp-848b5b879b-58jcr   1/1       Running   0          4m
myapp-848b5b879b-hp7zs   1/1       Running   0          8s
myapp-848b5b879b-sfq8r   1/1       Running   0          8s
myapp-848b5b879b-wpx9v   1/1       Running   0          4m

  

4)使用scale,将pod缩容到3

[root@master ~]# kubectl scale --replicas=3 deployment myapp
[root@master ~]# kubectl get pods
NAME                     READY     STATUS    RESTARTS   AGE
myapp-848b5b879b-2sj8n   1/1       Running   0          1m
myapp-848b5b879b-58jcr   1/1       Running   0          6m
myapp-848b5b879b-wpx9v   1/1       Running   0          6m

  

6、set动态升级版本

6.1 介绍

1set

  •  配置应用资源。
  •  使用这些命令能帮你更改现有应用资源一些信息。
  •  子命令:imageresourcesselectorsubject

2set image

  •  更新现有的资源对象的容器镜像。
  •  可使用资源对象包括(不区分大小写):pod (po)replicationcontroller (rc)deployment (deploy)daemonset (ds)jobreplicaset (rs)

6.2 语法

$ kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N

  

6.3 演示

将镜像版本从v1升级到v2

[root@master ~]# kubectl set image deployment myapp myapp=ikubernetes/myapp:v2
deployment.extensions/myapp image updated
[root@master ~]# kubectl rollout status deployment myapp  #动态显示版本升级过程
---因为版本升级,所以pod都是新建的,名字都改变了
[root@master ~]# kubectl get pods
NAME                          READY     STATUS    RESTARTS   AGE
client                        1/1       Running   0          3h
myapp-74c94dcb8c-d5fgk        1/1       Running   0          55s
myapp-74c94dcb8c-f2ntn        1/1       Running   0          21s
myapp-74c94dcb8c-ht9v7        1/1       Running   0          38s
---验证,版本升级成功
[root@master ~]# curl 10.104.205.158
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>

  

7、rollout undo回滚版本

7.1 介绍

1rollout

  •  对资源进行管理
  •  可用资源包括:deploymentsdaemonsets
  •  子命令:history(查看历史版本)pause(暂停资源)resume(恢复暂停资源)status(查看资源状态)undo(回滚版本)

2rollout undo

回滚pod到之前的版本。

7.2 语法

$ kubectl rollout undo (TYPE NAME | TYPE/NAME) [flags]

  

7.3 演示

[root@master ~]# kubectl rollout undo deployment myapp
deployment.extensions/myapp
[root@master ~]# kubectl get pods
NAME                     READY     STATUS    RESTARTS   AGE
myapp-848b5b879b-gg9lr   1/1       Running   0          15s
myapp-848b5b879b-km4t6   1/1       Running   0          16s
myapp-848b5b879b-nq98c   1/1       Running   0          17s
---验证,回滚成功
[root@master ~]# curl 10.104.205.158
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

  

8、edit编辑修改

8.1 介绍

  •  使用默认编辑器,编辑服务器上定义的资源。
  •  使用命令行工具获取的任何资源都可以使用edit命令编辑。edit命令会打开使用KUBE_EDITORGIT_EDITOR 或者EDITOR环境变量定义的编辑器,可以同时编辑多个资源,但所编辑过的资源只会一次性提交。edit除命令参数外还接受文件名形式。
  •  文件默认输出格式为YAML。要以JSON格式编辑,请指定“-o json”选项。
  •  如果在更新资源时报错,将会在磁盘上创建一个临时文件来记录。在更新资源时最常见的错误是几个用户同时使用编辑器更改服务器上资源,发生这种情况,你需要将你的更改应用到最新版本的资源上,或者更新保存的临时副本。

8.2 语法

$ kubectl edit (RESOURCE/NAME | -f FILENAME)

  

8.3 演示

1)修改service,将类型type: ClusterIP,修改为type: NodePort;修改后,可以在集群外访问到pod中的服务

[root@master ~]# kubectl edit svc myapp
... ...
spec:
... ...
  type: NodePort
... ...
service/myapp edited
[root@master ~]# kubectl get svc myapp
NAME      TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
myapp     NodePort   10.104.205.158   <none>        80:31599/TCP   23m

  

2)在集群外的主机上访问了

kubernetes系列05—kubectl应用快速入门-LMLPHP

01-23 14:27