kubectl
kubectl 陈述式资源管理方式(命令行)管理(增删改查)
创建资源对象:pod 控制器 service 声明式(yaml文件写)
陈述式命令的开头 kubectl命令行工具
1、查看集群的版本
kubectl version #查看集群的版本
2、查看集群资源对象的版本和简写
kubectl api-resources #查看集群资源对象的版本和简写
3、查看集群的信息
kubectl cluster-info #查看集群的信息
4、查看集群的日志
tail -f /var/log/messages #查看集群的日志
journalctl -u kubelet -f #查看集群的日志
5、查看集群的基本信息
kubectl get cs #查看集群组件的健康状态
kubectl get node #查看节点的状态
kubectl get pod #查看默认命名空间里面当前运行的pod NAME READY STATUS RESTARTS AGE nginx-8658fb997-9t8sr 1/1 Running 0 14h nginx-8658fb997-kjrdf 1/1 Running 0 14h nginx-8658fb997-rwrcj 1/1 Running 0 14h ##name:pod的名称 ##ready:1/1才是正常状态 ##status:running运行 只有1/1和running表明pod属于正常状态 ##restarts:表示pod的重启次数。自愈功能,pod非正常状态下,会自动进行重启,状态正常之后就不会进行重启。 ##AGE:当前pod的运行时间。
kubectl get pod -n kube-system #查看指定命名空间中的pod
6、创建和删除命名空间
kubectl create ns xy102 #创建命名空间 kubectl delete namespaces xy102 #删除命名空间
7、查看当前命名空间的所有资源
kubectl get all
8、查看pod的详细信息
kubectl get pod -o wide #查看pod的详细信息,pod被部署在哪个节点上。
9、查看一个指定命名空间中pod的详细情况
describe pod -n xy102 nginx1-654cb56c4-7sh2x
10、动态的查看指定命名空间中的pod的日志信息
kubectl logs -f -n xy102 nginx1-654cb56c4-79866
11、进入pod内的容器
kubectl exec -it -n xy102 nginx1-654cb56c4-79866 bash
12、创建一个简单的pod
[root@master01 ~]# kubectl run nginx2 --image=nginx:1.22 -n xy102
13、创建命名空间
kubectl create namepaces xy102
14、查看命名空间
kubectl get namespaces
15、删除命名空间
kubectl delete namespaces xy102
16、创建service默认类型
kubectl expose deployment nginx1 --port=80 --target-port=80 --name=nginx1 -n xy102 #前一个port是集群的service的端口,后一个port是容器内做的映射。
17、删除service类型
kubectl delete svc nginx1
Deployment的部署方式
资源对象的部署方式叫做deployment
无状态部署方式,pod的名称是随机生成的。
1、创建时可以指定副本数(pod)
2、可以实现滚动更新,先更新一个,更新好了之后再更新余下的pod
3、自动修复,默认的策略就是重启容器,删除pod相当于重启pod
4、可以支持回滚,如果更新有问题可以恢复到上一个版本
5、可以支持pod数量的扩容和缩容
[root@master01 ~]# kubectl create ns xy102 [root@master01 ~]# kubectl create deployment nginx1 --image=nginx:1.22 --replicas=3 -n xy102 [root@master01 ~]# kubectl get pod -n xy102 NAME READY STATUS RESTARTS AGE nginx1-654cb56c4-qfjl5 1/1 Running 0 18s nginx1-654cb56c4-t7j6p 1/1 Running 0 18s nginx1-654cb56c4-trrmv 1/1 Running 0 18s [root@master01 ~]# kubectl delete pod nginx1-654cb56c4-qfjl5 -n xy102 pod "nginx1-654cb56c4-qfjl5" deleted [root@master01 ~]# kubectl get pod -n xy102 NAME READY STATUS RESTARTS AGE nginx1-654cb56c4-7sh2x 1/1 Running 0 4s nginx1-654cb56c4-t7j6p 1/1 Running 0 5m39s nginx1-654cb56c4-trrmv 1/1 Running 0 5m39s ##集群控制器(资源对象)deployment创建的pod,deletepod相当于重启pod,不能删除pod。 [root@master01 ~]# kubectl describe pod -n xy102 nginx1-654cb56c4-7sh2x #查看一个pod的详细情况 [root@master01 ~]# kubectl logs -f -n xy102 nginx1-654cb56c4-79866 #动态的查看指定命名空间中的pod的日志信息 [root@master01 ~]# kubectl exec -it -n xy102 nginx1-654cb56c4-79866 bash #进入pod内的容器
pod的扩容和缩容
[root@master01 ~]# kubectl get pod -n xy102 -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx1-654cb56c4-79866 1/1 Running 0 27m 10.244.1.14 node02 <none> <none> nginx1-654cb56c4-79bwc 1/1 Running 0 27m 10.244.2.16 node01 <none> <none> nginx1-654cb56c4-8hnwq 1/1 Running 0 27m 10.244.2.15 node01 <none> <none> [root@node01 ~]# docker ps | grep nginx 方法一: [root@master01 ~]# kubectl scale deployment nginx1 -n xy102 --replicas=1 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx1-654cb56c4-79866 1/1 Running 0 30m 10.244.1.14 node02 <none> <none> #扩容 [root@master01 ~]# kubectl scale deployment nginx1 -n xy102 --replicas=3 deployment.apps/nginx1 scaled [root@master01 ~]# kubectl get pod -n xy102 -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx1-654cb56c4-67bm5 1/1 Running 0 2s 10.244.2.17 node01 <none> <none> nginx1-654cb56c4-79866 1/1 Running 0 30m 10.244.1.14 node02 <none> <none> nginx1-654cb56c4-mv2fl 1/1 Running 0 2s 10.244.2.18 node01 <none> <none>
扩容和缩容的方法二: [root@master01 ~]# kubectl edit deployment nginx1 -n xy102 replicas: 1 #将3改为1就是缩容 将1改为3就是扩容
service类型以及工作原理
pod的IP地址随着pod的生命周期有可能会发生改变,内部访问我们通过pod的IP可以直接访问,外部访问是否会受到影响呢?
如何设置对外暴露的端口
service如何与pod进行关联,这种关联是不受pod的IP地址的变化的影响。
[root@master01 ~]# kubectl expose deployment nginx1 --port=80 --target-port=80 --name=nginx1 -n xy102 #前一个port是集群的service的端口,后一个port是容器内做的映射。 [root@master01 ~]# kubectl get svc -n xy102 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx1 ClusterIP 10.96.118.182 <none> 80/TCP 69s [root@master01 ~]# curl 10.96.118.182 [root@master01 ~]# kubectl edit svc -n xy102 nginx1 type: NodePort [root@master01 ~]# kubectl get svc -n xy102 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx1 NodePort 10.96.118.182 <none> 80:32100/TCP 9m3s
service的类型:
1、默认类型,ClusterIp 提供集群内部的一个虚拟IP地址,让其他的pod来访问的,pod可以通过service直接访问到内部的容器。
内部组件通信使用。
2、NodePort:在每个节点(集群的所有节点)都会开发一个端口,外部就可以通过本机的ip+端口(nodeport)访问pod内的容器服务。
每个节点的nodeport的端口都是一致的。端口是有范围的:30000-32767
NodePort:service根据标签来匹配对应的pod。只要标签匹配,都能转发到指定的pod内的容器。
[root@master01 ~]# kubectl expose deployment nginx1 --port=80 --target-port=80 --name=nginx1 -n xy102 #前一个port是集群的service的端口,后一个port是容器内做的映射。 [root@master01 ~]# kubectl edit svc -n xy102 nginx1 type: NodePort [root@master01 ~]# kubectl edit pod -n xy102 nginx2 labels: app: nginx1 #修改nginx2的标签 [root@master01 ~]# kubectl exec -it -n xy102 nginx2 bash root@nginx2:/# echo test1 > /usr/share/nginx/html/index.html [root@master01 ~]# curl 192.168.60.110:32100 456 [root@master01 ~]# curl 192.168.60.110:32100 123 [root@master01 ~]# curl 192.168.60.110:32100 test1 [root@master01 ~]# curl 192.168.60.110:32100 789
3、LoadBalancer:云平台的运营商(阿里云,腾讯云)提供loadbalancer的地址,需要付费的。
提供之后,也是通过访问负载均衡的地址,可以实现pod的流量转发
4、ExternalName:把service的名称映射到DNS的域名上,让pod去访问集群外部的资源,而且设置为此类型,service将不能提供四层负载均衡的服务。
Ingress
Ingress 可以实现域名访问,能做七层代理
k8s项目的生命周期:
发布————修改————更新————回滚————销毁
[root@master01 ~]# curl -I 192.168.60.110:32100 HTTP/1.1 200 OK #查看版本 Server: nginx/1.22.1
设置滚动更新
[root@master01 ~]# kubectl set image deployment/nginx1 nginx=nginx:1.18 -n xy102
查看回滚点
[root@master01 ~]# kubectl rollout history deployment/nginx1 -n xy102 1 <none> 2 <none> ##数字大小决定了距离上次更新操作的远近,数字越大,就是最近的一次操作。
设置回滚
[root@master01 ~]# kubectl rollout undo deployment/nginx1 --to-revision=1 -n xy102
销毁基于deployment创建的pod
[root@master01 ~]# kubectl delete deployments.apps -n xy102 nginx1 # [root@master01 ~]# kubectl delete svc -n xy102 nginx1