kubernetes常用命令

目录

 

 1、用 kubectl 命令直接创建资源

2、用 配置文件创建资源

kubectl create

kubectl edit 

kubectl replace

kubectl patch

kubectl apply

kubectl scale

kube autoscale 

kubectl cordon 与 uncordon

kubectl drain

kubectl label


 1、用 kubectl 命令直接创建资源

$ kubectl run nginx --image=nginx --replicas=3

$ kubectl get pods

$ kubectl describe pod/nginx-dbddb74b8-4fmfk                #查看pod里的容器

$ kubectl get all -o wide

#创建一个service

$ kubectl expose deployment nginx --port=88 --target-port=80 --type=NodePort

#查看service

$ kubectl get svc

$ kubectl describe service nginx

$ kubectl get endpoints nginx

$ kubectl get deployment

#在zhuyun4服务器上

$ curl 10.104.144.109:88

#在服务器上访问

注意端口。

# iptables的规则

$ iptables-save | grep 31306

$ iptables-save | grep 88

2、用 配置文件创建资源

vim nginx.yaml

---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: nginx
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
          protocol: TCP
---
kind: Service
apiVersion: v1
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  type: NodePort
  ports:
  - protocol: TCP
    nodePort: 31001
    targetPort: 80
    port: 80
  selector:
    name: nginx

kubectl create

创建pod/deployment/service

$ kubectl create -f .

查看结果

$ kubectl get all -o wide

 

kubectl edit 

edit这条命令用于编辑服务器上的资源。

使用-o参数指定输出格式为yaml的nginx的service的设定情况确认,取得现场情况,这也是我们不知道其yaml文件而只有环境时候能做的事情。

$ kubectl get service |grep nginx

$ kubectl get service nginx -o yaml

使用edit命令对nginx的service设定进行编辑,得到如下信息

可以看到当前端口为31001,在此编辑中,我们把它修改为31002

$ kubectl edit service nginx

编辑之后确认结果发现,此服务端口已经改变

$ kubectl get service

确认后发现能够立连通

$ curl 192.168.10.13:31002

而之前的端口已经不通

$ curl 192.168.10.13:31001

所使用场景之一,edit编辑的是运行环境的设定而不需要停止服务。

 

kubectl replace

我们使用上个例子中的service的port,重新把它改回31001。

确认port信息为31002

$ kubectl get service

取得当前的nginx的service的设定文件,然后修改port信息

$ kubectl get service nginx -o yaml >nginx_forreplace.yaml

$ cp -p nginx_forreplace.yaml nginx_forreplace.yaml.org

$ vim nginx_forreplace.yaml

$ diff nginx_forreplace.yaml nginx_forreplace.yaml.org

执行replace命令

提示被替换了

$ kubectl replace -f nginx_forreplace.yaml

确认结果

确认之后发现port确实重新变成了31001

$ kubectl get service

 

kubectl patch

当部分修改一些设定的时候patch非常有用

事前确认

$ kubectl get pod

$ kubectl exec nginx-545d484b66-9nvfs -it sh

执行patch进行替换

$ kubectl patch pod nginx-545d484b66-9nvfs -p

'{"spec":{"containers":[{"name":"nginx","image":"nginx:1.14-alpine"}]}}'

确认结果

确认当前pod中的镜像已经patch成了1.14

$ kubectl exec nginx-545d484b66-9nvfs -it sh

 

kubectl apply

同样apply命令是用来使用文件或者标准输入来更改配置信息。

事前准备

$ kubectl delete -f .

$ kubectl create -f .

结果确认

Service的Port设定为了31001

$ kubectl get service

修改设定文件

将port修改为31002

$ vim nginx.yaml

执行apply命令

执行设定文件可以在运行状态修改port信息

$ kubectl apply -f nginx.yaml

结果确认

确认确实将port已经修改为31002了

$ kubectl get service

 

kubectl scale

scale命令用于横向扩展,是kubernetes或者swarm这类容器编辑平台的重要功能之一,让我们来看看是如何使用的

事前准备

事前设定nginx的replica为一,而经过确认此pod在192.168.10.14(zhuyun4)上运行

$ kubectl delete -f .

$ kubectl create -f .

$ kubectl get all -o wide

执行scale命令

使用scale命令进行横向扩展,将原本为1的副本,提高到3。

$ kubectl scale --current-replicas=1 --replicas=3 deployment/nginx

通过确认发现已经进行了横向扩展

$ kubectl get all -o wide

 

kube autoscale 

autoscale命令用于自动扩展确认,跟scale不同的是前者还是需要手动执行,而autoscale则会根据负载进行调解。而这条命令则可以对Deployment/ReplicaSet/RC进行设定,通过最小值和最大值的指定进行设定,这里只是给出执行的结果,不再进行实际的验证。

$ kubectl autoscale deployment nginx --min=2 --max=5

当然使用还会有一些限制,比如当前3个,设定最小值为2的话会出现什么样的情况?

$ kubectl get pods -o wide

$ kubectl autoscale deployment nginx --min=2 --max=2

 

kubectl cordon 与 uncordon

在实际维护的时候会出现某个node坏掉,或者做一些处理,暂时不能让生成的pod在此node上运行,需要通知kubernetes让其不要创建过来,这条命令就是cordon,uncordon则是取消这个要求。例子如下:

事前准备

创建了一个nginx的pod,跑在192.168.10.15(zhuyun5)上。

$ kubectl create -f .

$ kubectl get pod -o wide

执行scale命令

横向扩展到3个副本,发现利用roundrobin策略每个node上运行起来了一个pod,14(zhuyun4)这台机器有两个。

$ kubectl scale --replicas=3 deployment/nginx

$ kubectl get all -o wide

执行cordon命令

设定14(zhuyun4),使得14(zhuyun4)不可使用,使用get node确认,其状态显示SchedulingDisabled。

$ kubectl cordon zhuyun4

$ kubectl get nodes -o wide

执行scale命令

再次执行横向扩展命令,看是否会有pod漂到14(zhuyun4)这台机器上,结果发现只有之前的两个pod,再没有新的pod漂过去。

$ kubectl scale --replicas=6 deployment/nginx

$ kubectl get pods -o wide

执行uncordon命令

使用uncordon命令解除对14(zhuyun4)机器的限制,通过get node确认状态也已经正常。

$ kubectl uncordon zhuyun4

$ kubectl get nodes -o wide

执行scale命令

再次执行scale命令,发现有新的pod可以创建到14(zhuyun4)node上了。

$ kubectl scale --replicas=10 deployment/nginx

$ kubectl get pods -o wide

 

kubectl drain

drain命令用于对某个node进行设定,是为了设定此node为维护做准备。英文的drain有排干水的意思,下水道的水之后排干后才能进行维护。那我们来看一下kubectl”排水”的时候都作了什么

事前准备

将nginx的副本设定为4,确认发现14(zhuyun4)上启动了两个pod。

$ kubectl create -f .

$ kubectl get pod -o wide

$ kubectl get nodes -o wide

$ kubectl scale --replicas=4 deployment/nginx

$ kubectl get pods -o wide

执行drain命令

执行drain命令,发现这条命令做了两件事情:

1. 设定此node不可以使用(cordon)

2. evict了其上的两个pod

结果确认

evict的意思有驱逐和回收的意思,让我们来看一下evcit这个动作的结果到底是什么。

结果是134上面已经不再有pod,而在132和133上新生成了两个pod,用以替代在134上被退场的pod,而这个替代的动作应该是replicas的机制保证的。所以drain的结果就是退场pod和设定node不可用(排水),这样的状态则可以进行维护了,执行完后重新uncordon即可。

 

kubectl label

添加label

$ kubectl label nodes node1 direction=north

 

查看label

$ kubectl get nodes --show-labels

 

修改label

$ kubectl label nodes node1 direction=east --overwrite

 

删除label

$ kubectl label nodes node1 direction-

 

 

或者就是在原来create的时候配置文件里面,把这个label删掉,然后再用

$ kubectl apply -f [config_file]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值