Kubernetes之kubectl常用命令使用指南:1:创建和删除

这里写图片描述
kubectl是一个用于操作kubernetes集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具。这里我们会通过一些简单的实例来展现其中一些高频命令的使用方法。
更为重要的是这些命令使用的场景以及能够解决什么样的问题。这篇文章我们来介绍一下创建和删除相关的命令。

常用命令

kubectl创建和删除相关,本文将会简单介绍一下如下命令

项番命令说明
No.1run在集群上运行一个镜像
No.2create使用文件或者标准输入的方式创建一个资源
No.3delete使用文件或者标准输入以及资源名称或者标签选择器来删除某个资源

事前准备

##版本

[root@ku8-1 tmp]# kubectl version
Client 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]#

集群构成

一主三从的Kubernetes集群

项番类型HostnameIP
No.1Masterku8-1192.168.32.131
No.1Nodeku8-2192.168.32.132
No.1Nodeku8-3192.168.32.133
No.1Nodeku8-4192.168.32.134
[root@ku8-1 tmp]# kubectl get nodes
NAME             STATUS    AGE
192.168.32.132   Ready     12m
192.168.32.133   Ready     11m
192.168.32.134   Ready     11m
[root@ku8-1 tmp]# 

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=9000
deployment "sonarqube" created
[root@ku8-1 tmp]#

让我们来看看这条kubectl run之后,kubernetes做了什么,从它的提示看到创建了一个deployment(1.4之后推荐的方式)。

确认Deployment

[root@ku8-1 tmp]# kubectl get deployment
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
sonarqube   1         1         1            1           5m
[root@ku8-1 tmp]# 

确认pod

kubernetes将镜像运行在pod中以方便实施卷和网络共享等管理,使用get pods可以清楚的看到生成了一个pod

[root@ku8-1 tmp]# kubectl get pods
NAME                         READY     STATUS    RESTARTS   AGE
sonarqube-1880671902-s3fdq   1/1       Running   0          6m
[root@ku8-1 tmp]# 

kubectl delete

让我们来试着使用kubectl delete删除一下这些创建的对象
##删除pod

[root@ku8-1 tmp]# kubectl delete pods sonarqube-1880671902-s3fdq
pod "sonarqube-1880671902-s3fdq" deleted
[root@ku8-1 tmp]#

确认结果

可以看到刚刚生成的sonarqube-1880671902-s3fdq正在结束(Terminating),随之一个新的sonarqube-1880671902-n75d2正在创建,这是正是确保replicas为1的动作。

[root@ku8-1 tmp]# kubectl get pods
NAME                         READY     STATUS              RESTARTS   AGE
sonarqube-1880671902-n75d2   0/1       ContainerCreating   0          11s
sonarqube-1880671902-s3fdq   0/1       Terminating         0          10m
[root@ku8-1 tmp]#

再次确认

稍等之后再次确认,发现replicas仍然保持在1个的状态

[root@ku8-1 tmp]# kubectl get pods
NAME                         READY     STATUS    RESTARTS   AGE
sonarqube-1880671902-n75d2   1/1       Running   0          40s
[root@ku8-1 tmp]# kubectl get deployments
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
sonarqube   1         1         1            1           15m
[root@ku8-1 tmp]#

删除deployment

直接删除pod触发了replicas的确保机制,那么我们删除deployment

[root@ku8-1 tmp]# kubectl delete deployment sonarqube
deployment "sonarqube" deleted
[root@ku8-1 tmp]#

结果确认

通过使用deployment进行删除,则全部删除。

[root@ku8-1 tmp]# kubectl get pods
No resources found.
[root@ku8-1 tmp]# kubectl get deployments
No resources found.
[root@ku8-1 tmp]#

kubectl create

使用kubectl run在设定很复杂的时候需要非常长的一条语句,敲半天也很容易出错,也没法保存,在碰到转义字符的时候也经常会很抓狂,所以更多场景下会使用yaml或者json文件,而使用kubectl create或者delete就可以利用这些yaml文件。
比如,我们使用如下的方式来分别创建mysql和sonarqube的RC。

事前准备

[root@ku8-1 tmp]# ls yamls
mysql.yaml  sonar.yaml
[root@ku8-1 tmp]# cat yamls/mysql.yaml 
---
kind: ReplicationController
apiVersion: v1
metadata:
  name: mysql
spec:
  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: ReplicationController
apiVersion: v1
metadata:
  name: sonarqube
spec:
  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]# 

创建(MYSQL)

[root@ku8-1 tmp]# kubectl create -f yamls/mysql.yaml 
replicationcontroller "mysql" created
[root@ku8-1 tmp]#

确认(MYSQL)

[root@ku8-1 tmp]# kubectl get rc
NAME      DESIRED   CURRENT   READY     AGE
mysql     1         1         1         1m
[root@ku8-1 tmp]# kubectl get pod
NAME          READY     STATUS    RESTARTS   AGE
mysql-nl8sq   1/1       Running   0          1m
[root@ku8-1 tmp]# 

创建(SONARQUBE)

[root@ku8-1 tmp]# kubectl create -f yamls/sonar.yaml 
replicationcontroller "sonarqube" created
[root@ku8-1 tmp]# 

确认(SONARQUBE)

[root@ku8-1 tmp]# kubectl get pods
NAME              READY     STATUS    RESTARTS   AGE
mysql-nl8sq       1/1       Running   0          2m
sonarqube-p1cnj   1/1       Running   0          46s
[root@ku8-1 tmp]# kubectl get rc
NAME        DESIRED   CURRENT   READY     AGE
mysql       1         1         1         2m
sonarqube   1         1         1         51s
[root@ku8-1 tmp]# 

删除(SONARQUBE)

使用yaml文件也可以直接删除所创建出来的内容,比如我们先删除刚刚创建的sonarqube相关。

[root@ku8-1 tmp]# kubectl delete -f yamls/sonar.yaml 
replicationcontroller "sonarqube" deleted
[root@ku8-1 tmp]# 

确认(SONARQUBE)

[root@ku8-1 tmp]# kubectl get pods
NAME          READY     STATUS    RESTARTS   AGE
mysql-nl8sq   1/1       Running   0          4m
[root@ku8-1 tmp]# kubectl get rc
NAME      DESIRED   CURRENT   READY     AGE
mysql     1         1         1         4m
[root@ku8-1 tmp]# 

删除(MYSQL)

[root@ku8-1 tmp]# kubectl delete -f yamls/mysql.yaml 
replicationcontroller "mysql" deleted
[root@ku8-1 tmp]#

确认(MYSQL)

[root@ku8-1 tmp]# kubectl get pods
No resources found.
[root@ku8-1 tmp]# kubectl get rc
No resources found.
[root@ku8-1 tmp]#

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: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: mysql
spec:
  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: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: sonarqube
spec:
  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]# 

创建

有多个yaml文件的时候,可以使用如下方式一下全部创建

[root@ku8-1 tmp]# kubectl create -f yamls/
deployment "mysql" created
deployment "sonarqube" created
[root@ku8-1 tmp]# 

确认

[root@ku8-1 tmp]# kubectl get pods
NAME                         READY     STATUS    RESTARTS   AGE
mysql-478535978-2l7kq        1/1       Running   0          3m
sonarqube-3574384362-x3mg2   1/1       Running   0          3m
[root@ku8-1 tmp]# kubectl get deployments
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
mysql       1         1         1            1           3m
sonarqube   1         1         1            1           3m
[root@ku8-1 tmp]#

删除

同样,有多个yaml文件的时候,可以使用如下方式一下全部删除

[root@ku8-1 tmp]# kubectl delete -f yamls/
deployment "mysql" deleted
deployment "sonarqube" deleted
[root@ku8-1 tmp]# 

确认

[root@ku8-1 tmp]# kubectl get pods
No resources found.
[root@ku8-1 tmp]# kubectl get deployments
No resources found.
[root@ku8-1 tmp]#

总结

这篇文章通过几个最简单的命令熟悉了如何使用kubectl对镜像进行创建和删除,在后面我们会进一步介绍一些常用的命令。

淼叔 CSDN认证博客专家 神经网络 TensorFlow NLP
资深架构师,PMP、OCP、CSM、HPE University讲师,EXIN DevOps Professional与DevOps Master认证讲师,曾担任HPE GD China DevOps & Agile Leader,帮助企业级客户提供DevOps咨询培训以及实施指导。熟悉通信和金融领域,有超过十年金融外汇行业的架构设计、开发、维护经验,在十几年的IT从业生涯中拥有了软件开发设计领域接近全生命周期的经验和知识积累,著有企业级DevOps技术与工具实战。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页