kubectl

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值