分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
kubectl是一个用于操作kubernetes集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具。这里我们会通过一些简单的实例来展现其中一些高频命令的使用方法。
更为重要的是这些命令使用的场景以及能够解决什么样的问题。这篇文章我们来介绍一下创建和删除相关的命令。
常用命令
kubectl创建和删除相关,本文将会简单介绍一下如下命令
项番 | 命令 | 说明 |
---|---|---|
No.1 | run | 在集群上运行一个镜像 |
No.2 | create | 使用文件或者标准输入的方式创建一个资源 |
No.3 | delete | 使用文件或者标准输入以及资源名称或者标签选择器来删除某个资源 |
事前准备
版本
[root@ku8-1 tmp]# kubectl versionClient Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:57:25Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:52:34Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
集群构成
一主三从的Kubernetes集群
项番 | 类型 | Hostname | IP |
---|---|---|---|
No.1 | Master | ku8-1 | 192.168.32.131 |
No.1 | Node | ku8-2 | 192.168.32.132 |
No.1 | Node | ku8-3 | 192.168.32.133 |
No.1 | Node | ku8-4 | 192.168.32.134 |
[root@ku8-1 tmp]# kubectl get nodesNAME STATUS AGE192.168.32.132 Ready 12m192.168.32.133 Ready 11m192.168.32.134 Ready 11m[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
- 5
- 6
kubectl run
运行一个镜像
kubectl run和docker run一样,它能将一个镜像运行起来,我们使用kubectl run来将一个sonarqube的镜像启动起来。
[root@ku8-1 tmp]# kubectl run sonarqube --image=192.168.32.131:5000/sonarqube:5.6.5 --replicas=1 --port=9000deployment "sonarqube" created[root@ku8-1 tmp]#
- 1
- 2
- 3
让我们来看看这条kubectl run之后,kubernetes做了什么,从它的提示看到创建了一个deployment(1.4之后推荐的方式)。
确认Deployment
[root@ku8-1 tmp]# kubectl get deploymentNAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGEsonarqube 1 1 1 1 5m[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
确认pod
kubernetes将镜像运行在pod中以方便实施卷和网络共享等管理,使用get pods可以清楚的看到生成了一个pod
[root@ku8-1 tmp]# kubectl get podsNAME READY STATUS RESTARTS AGEsonarqube-1880671902-s3fdq 1/1 Running 0 6m[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
kubectl delete
让我们来试着使用kubectl delete删除一下这些创建的对象
删除pod
[root@ku8-1 tmp]# kubectl delete pods sonarqube-1880671902-s3fdqpod "sonarqube-1880671902-s3fdq" deleted[root@ku8-1 tmp]#
- 1
- 2
- 3
确认结果
可以看到刚刚生成的sonarqube-1880671902-s3fdq正在结束(Terminating),随之一个新的sonarqube-1880671902-n75d2正在创建,这是正是确保replicas为1的动作。
[root@ku8-1 tmp]# kubectl get podsNAME READY STATUS RESTARTS AGEsonarqube-1880671902-n75d2 0/1 ContainerCreating 0 11ssonarqube-1880671902-s3fdq 0/1 Terminating 0 10m[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
- 5
再次确认
稍等之后再次确认,发现replicas仍然保持在1个的状态
[root@ku8-1 tmp]# kubectl get podsNAME READY STATUS RESTARTS AGEsonarqube-1880671902-n75d2 1/1 Running 0 40s[root@ku8-1 tmp]# kubectl get deploymentsNAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGEsonarqube 1 1 1 1 15m[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
删除deployment
直接删除pod触发了replicas的确保机制,那么我们删除deployment
[root@ku8-1 tmp]# kubectl delete deployment sonarqubedeployment "sonarqube" deleted[root@ku8-1 tmp]#
- 1
- 2
- 3
结果确认
通过使用deployment进行删除,则全部删除。
[root@ku8-1 tmp]# kubectl get podsNo resources found.[root@ku8-1 tmp]# kubectl get deploymentsNo resources found.[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
- 5
kubectl create
使用kubectl run在设定很复杂的时候需要非常长的一条语句,敲半天也很容易出错,也没法保存,在碰到转义字符的时候也经常会很抓狂,所以更多场景下会使用yaml或者json文件,而使用kubectl create或者delete就可以利用这些yaml文件。
比如,我们使用如下的方式来分别创建mysql和sonarqube的RC。
事前准备
[root@ku8-1 tmp]# ls yamlsmysql.yaml sonar.yaml[root@ku8-1 tmp]# cat yamls/mysql.yaml ---kind: ReplicationControllerapiVersion: v1metadata: name: mysqlspec: replicas: 1 selector: name: mysql template: metadata: labels: name: mysql spec: containers: - name: mysql image: 192.168.32.131:5000/mysql:5.7.16 ports: - containerPort: 3306 protocol: TCP env: - name: MYSQL_ROOT_PASSWORD value: "hello123"[root@ku8-1 tmp]# [root@ku8-1 tmp]# cat yamls/sonar.yaml ---kind: ReplicationControllerapiVersion: v1metadata: name: sonarqubespec: replicas: 1 selector: name: sonarqube template: metadata: labels: name: sonarqube spec: containers: - name: sonarqube image: 192.168.32.131:5000/sonarqube:5.6.5 ports: - containerPort: 9000 protocol: TCP[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
创建(MYSQL)
[root@ku8-1 tmp]# kubectl create -f yamls/mysql.yaml replicationcontroller "mysql" created[root@ku8-1 tmp]#
- 1
- 2
- 3
确认(MYSQL)
[root@ku8-1 tmp]# kubectl get rcNAME DESIRED CURRENT READY AGEmysql 1 1 1 1m[root@ku8-1 tmp]# kubectl get podNAME READY STATUS RESTARTS AGEmysql-nl8sq 1/1 Running 0 1m[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
创建(SONARQUBE)
[root@ku8-1 tmp]# kubectl create -f yamls/sonar.yaml replicationcontroller "sonarqube" created[root@ku8-1 tmp]#
- 1
- 2
- 3
确认(SONARQUBE)
[root@ku8-1 tmp]# kubectl get podsNAME READY STATUS RESTARTS AGEmysql-nl8sq 1/1 Running 0 2msonarqube-p1cnj 1/1 Running 0 46s[root@ku8-1 tmp]# kubectl get rcNAME DESIRED CURRENT READY AGEmysql 1 1 1 2msonarqube 1 1 1 51s[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
删除(SONARQUBE)
使用yaml文件也可以直接删除所创建出来的内容,比如我们先删除刚刚创建的sonarqube相关。
[root@ku8-1 tmp]# kubectl delete -f yamls/sonar.yaml replicationcontroller "sonarqube" deleted[root@ku8-1 tmp]#
- 1
- 2
- 3
确认(SONARQUBE)
[root@ku8-1 tmp]# kubectl get podsNAME READY STATUS RESTARTS AGEmysql-nl8sq 1/1 Running 0 4m[root@ku8-1 tmp]# kubectl get rcNAME DESIRED CURRENT READY AGEmysql 1 1 1 4m[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
删除(MYSQL)
[root@ku8-1 tmp]# kubectl delete -f yamls/mysql.yaml replicationcontroller "mysql" deleted[root@ku8-1 tmp]#
- 1
- 2
- 3
确认(MYSQL)
[root@ku8-1 tmp]# kubectl get podsNo resources found.[root@ku8-1 tmp]# kubectl get rcNo resources found.[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
- 5
Deployment方式:准备
RC在1.4之后已经被建议用Deployment方式替换,主要只需要替换kind和apiversion和selector即可,1.5和1.6在此处也略有区别。
[root@ku8-1 tmp]# ls yamls/mysql.yaml sonar.yaml[root@ku8-1 tmp]# cat yamls/mysql.yaml ---kind: DeploymentapiVersion: extensions/v1beta1metadata: name: mysqlspec: replicas: 1 template: metadata: labels: name: mysql spec: containers: - name: mysql image: 192.168.32.131:5000/mysql:5.7.16 ports: - containerPort: 3306 protocol: TCP env: - name: MYSQL_ROOT_PASSWORD value: "hello123"[root@ku8-1 tmp]# [root@ku8-1 tmp]# cat yamls/sonar.yaml ---kind: DeploymentapiVersion: extensions/v1beta1metadata: name: sonarqubespec: replicas: 1 template: metadata: labels: name: sonarqube spec: containers: - name: sonarqube image: 192.168.32.131:5000/sonarqube:5.6.5 ports: - containerPort: 9000 protocol: TCP[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
创建
有多个yaml文件的时候,可以使用如下方式一下全部创建
[root@ku8-1 tmp]# kubectl create -f yamls/deployment "mysql" createddeployment "sonarqube" created[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
确认
[root@ku8-1 tmp]# kubectl get podsNAME READY STATUS RESTARTS AGEmysql-478535978-2l7kq 1/1 Running 0 3msonarqube-3574384362-x3mg2 1/1 Running 0 3m[root@ku8-1 tmp]# kubectl get deploymentsNAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGEmysql 1 1 1 1 3msonarqube 1 1 1 1 3m[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
删除
同样,有多个yaml文件的时候,可以使用如下方式一下全部删除
[root@ku8-1 tmp]# kubectl delete -f yamls/deployment "mysql" deleteddeployment "sonarqube" deleted[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
确认
[root@ku8-1 tmp]# kubectl get podsNo resources found.[root@ku8-1 tmp]# kubectl get deploymentsNo resources found.[root@ku8-1 tmp]#
- 1
- 2
- 3
- 4
- 5
总结
这篇文章通过几个最简单的命令熟悉了如何使用kubectl对镜像进行创建和删除,在后面我们会进一步介绍一些常用的命令。