目录
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]