【Kubernetes】k8s集群中kubectl的陈述式资源管理

目录

一.k8s集群资源管理方式分类

1.陈述式资源管理方式

2.声明式资源管理方式

二.陈述式资源管理方法

三.kubectl命令

四.项目生命周期

1.创建 kubectl create命令

2.发布 kubectl expose命令

3.更新 kubectl set

4.回滚 kubectl rollout 

5.删除 kubectl delete


一.k8s集群资源管理方式分类

1.陈述式资源管理方式

增删查比较方便,但是改非常不方便
使用一条kubectl命令和参数选项来实现资源对象管理操作

2.声明式资源管理方式

yaml文件管理
使用yaml配置文件里定义的配置,实现资源对象的管理操作

二.陈述式资源管理方法

kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口
kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径
kubectl 的命令大全:kubectl --help
k8s中文文档:http://docs.kubernetes.org.cn/683.html
对资源的增、删、查操作比较方便,但对改的操作就不容易了

三.kubectl命令

查看版本信息
kubectl version

查看资源对象简写
kubectl api-resources

查看集群信息
kubectl cluster-info
kubectl get cs
kubectl get nodes

配置kubectl自动补全
source <(kubectl completion bash)

vim /etc/bashrc  #可添加到该文件的末尾
bash切换环境即可

node节点查看日志
journalctl -u kubelet -f

kubectl get <resource> [-o wide|json|yaml] [-n namespace]
获取资源的相关信息,-n 指定命令空间,-o 指定输出格式
resource可以是具体资源名称,如pod nginx-xxx;也可以是资源类型,如pod;或者all(仅展示几种核心资源,并不完整)
--all-namespaces 或 -A :表示显示所有命名空间,
--show-labels :显示所有标签
-l app :仅显示标签为app的资源
-l app=nginx :仅显示包含app标签,且值为nginx的资源
 
wide:显示详细信息

kubectl get -n kube-flannel pods   #查看命名空间kube-flannel下的所有pod资源
kubectl get -n kube-flannel pods kube-flannel-ds-c5zqz  #-n指定具体命名空间查看指定的kube-flannel-ds-c5zqz资源
 
kubectl get -n kube-flannel pods kube-flannel-ds-c5zqz -o wide  #显示kube-flannel-ds-c5zqz资源的详细信息

kubectl get -n kube-system pods  --show-labels    # --show-labels    查看指定命名空间下资源的标签
kubectl get -n kube-system pods  --show-labels -l k8s-app    #通过-l筛选k8s-app 标签的资源
kubectl get -n kube-system pods  --show-labels -l k8s-app=kube-dns  #进一步筛选k8s-app标签值等于kube-dns的资源

kubectl get -n kubernetes-dashboard all  #all选项会列出指定命名空间下pod、service、控制器资源

kubectl get -n kubernetes-dashboard pods
kubectl get -n kubernetes-dashboard pods,service
kubectl get -n kubernetes-dashboard pods,service,deploy
#想提示查看多个资源,可在资源中间以,分隔
kubectl get -n kubernetes-dashboard all   #查看所有资源

查看 master 节点状态
kubectl get componentstatuses
kubectl get cs

查看命名空间
kubectl get namespace
kubectl get ns
命令空间的作用:用于允许不同 命名空间 的 相同类型 的资源 重名的

查看default命名空间的所有资源
kubectl get all [-n default]

创建命名空间
kubectl get ns
 
kubectl create namespace xy101
kubectl create deployment nginx1 --image=nginx -r 3 --port=80 -n xy101   #即可指定命名空间创建资源,不可在同一个命名空间中创建相同名称的同种资源
kubectl get -n xy101 all

查看某个资源的详细信息
kubectl describe -n xy101 deployments.apps nginx1  #deployments.apps资源的名称

查看命名空间xy101 中的pod 信息
 
kubectl describe -n <命名空间> <资源类型> <资源名称> 
 
kubectl describe -n xy101 pod nginx1-794dd8cb7b-fcxnx 

删除pod
kubectl delete -n <命名空间> <资源类型> <资源名称> 
 
kubectl delete -n xy101 pod nginx1-794dd8cb7b-bc6cv   #此种方法创建的pod资源若直接删除pod,无法删除由于设置了副本数,删除一个会自动再创建一个

创建pod资源方法2(此种方法创建的pod是独立存在的,没有控制器管理)
kubectl run -n xy101 nginx2 --image=nginx --port=80   #此种方法创建的pod无控制器进行管理,可直接删除
 
kubectl delete -n xy101 pod nginx2   #此种方法创建的pod可直接删除

kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录
 
kubectl exec -n <命名空间> -it <Pod资源名称> [-c 容器名称] -- sh|bash|命令
 
kubectl exec -it -n xy101 pod/nginx1-794dd8cb7b-cbdjd -- sh   
exec -it -n xy101 pod/nginx1-794dd8cb7b-cbdjd -- ls -l  #在不进入容器的前提下查看其中内容

当一个pod中存在多个容器,可使用-c指定登录的容器
 
kubectl describe -n xy101 pod/nginx1-794dd8cb7b-cbdjd  #查看资源下的容器
kubectl exec -it -n xy101 -c nginx pod/nginx1-794dd8cb7b-cbdjd -- sh   #使用-c指定登录的容器

查看Pod中容器日志
kubectl logs -n <命名空间> <Pod资源名称> [-c 容器名称] [-f] [-p]       #-p表示查看Pod容器重启前的日志
 
kubectl logs -n xy101 nginx1-794dd8cb7b-cbdjd -c nginx

扩缩容
kubectl scale -n <命名空间> <Pod控制器资源类型>    <资源名称> --replicas=副本数
                                           deployment|statefulset
 
kubectl scale -n xy101 deployment nginx1 --replicas=3

删除副本控制器
kubectl get -n xy101 all
kubectl delete -n xy101 deployments.apps nginx2

删除(重启)pod资源,由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起,若pod无法删除,总是处于terminate状态,则要强行删除pod
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
#grace-period表示过渡存活期,默认30s,在删除pod之前允许pod慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod
 
kubectl delete -n xy101 pod nginx1-794dd8cb7b-lmjls --force --grace-period=0
kubectl get -n xy101 all

删除全部pod资源进行重建
kubectl delete -n xy101 pods --all
kubectl get -n xy101 all

删除命名空间
kubectl delete ns 网络空间
kubectl delete ns xy101

查看service关联的Pod端点
kubectl describe -n <命名空间> <资源类型> <资源名称>
kubectl describe -n xy101 svc svc-nginx1
 
kubectl get -n xy101 endpoints <资源名称>    #直接查看关联端点
#以上两种方法可以查看端点不多的情况,若端点比较多就无法详细查看到
 
kubectl describe -n <命名空间> endpoints <资源名称>
kubectl describe -n xy101 endpoints svc-nginx1

如何修改标签选择器的值
#创建service
kubectl create -n <命名空间>  service <svc资源类型>  <资源名称>  --tcp=<clusterIP的端口>:<容器端口>
kubectl create -n xy101 service nodeport svc-1 --tcp=8080:80

修改service标签选择器
kubectl set -n <命名空间>  selector  <资源类型>  <资源名称>  '标签key=value'
 
kubectl set -n xy101 selector svc svc-1 'app=nginx1'

四.项目生命周期

项目的生命周期:创建-->发布-->更新-->回滚-->删除

1.创建 kubectl create命令

创建并运行一个或多个容器镜像
创建一个deployment 或job 来管理容器

kubectl create ns xy101   #创建命名空间
kubectl create -n xy101 deployment nginx1 --image=nginx --port=80 --replicas=3  #创建资源

2.发布 kubectl expose命令

将资源暴露为新的 Service

为deployment的nginx创建service,并通过Service的8080端口转发至容器的80端口上,Service的名称为
nginx-service,类型为NodePort
 
kubectl expose deployment nginx --port=8080 --target-port=80 --name=nginx-service --type=NodePort
 
kubectl create service nodeport nginx-service --tcp=8080:80

service 的 type 类型

ClusterIP(默认类型):分配一个集群内部的虚拟 IP 地址,仅在集群内部可访问。例如Pod和Pod之间的通信,如果是Kubernetes集群外的请求访问是不行的。
NodePort:宿主机上开启一个特定端口(默认范围 30000-32767),直接与Pod的端口相连,实现访问宿主机IP:端口能够直接访问到Pod。用途:允许外部访问,但通常用于开发或测试。
LoadBalancer:使用外接负载均衡器完成到服务的负载分发,此模式需要使用云提供商的负载均衡器,将请求分发到所有的Node上,再结合kube-proxy实现流量接入:外部客户端 -> 云负载均衡器 -> Kubernetes 节点 -> kube-proxy -> Pod
LoadBalancer和NodePort很相似,目的都是向外部暴露一个端口,区别在于LoadBalancer会在集群的外部再来做一个负载均衡设备,而这个设备需要外部云环境支持的,外部服务发送到这个设备上的请求,会被设备负载均衡转发到K8S集群中
externalName:将外部服务映射到集群内部,并以DNS的形式用于Pod中服务对外部服务访问

创建service方法1
 
kubectl expose -n <命名空间>  <Pod控制器资源类型>  <资源名称> --name=<svc资源名称>  --tpye=<svc类型>  --port=<clusterIP的端口>  --targetPort=<容器端口>
                              
kubectl expose -n xy101 deployment nginx1 --name=svc-nginx1 --port=8080 --target-port=80 --type=ClusterIP     #创建类型为ClusterIP的service
 
所有节点服务器即可通过访问http://clusterIP:port访问service  
curl http://10.96.194.137:8080

kubectl expose -n xy101 deployment nginx1 --name=svc-nginx2 --port=8080 --target-port=80 --type=NodePort  #创建service类型为NodePort
 
kubectl get -n xy101 svc
 
netstat -lntp | grep :31373    #在每个节点都可监听到这个端口,  K8S集群外部/内部用户都可以通过nodeIP:nodePort来访问service


3.更新 kubectl set

重新创建一个service做测试
kubectl create -n xy101 deployment myapp-test01 --image=soscscs/myapp:v1 --port=80 --replicas=2   #创建pod资源
kubectl expose -n xy101 deployment myapp-test01 --name=test02 --port=8080 --target-port=80 --type=NodePort  #创建service,类型选择NodePort
外部服务器即可通过nodeip:nodeport访问关联的pod

kubectl set image  -n <命名空间>  <Pod控制器资源类型>  <资源名称>  <容器名=镜像名:标签>
kubectl set image -n xy101 deployment myapp-test01 myapp=soscscs/myapp:v2
kubectl describe -n xy101 deployments.apps myapp-test01

4.回滚 kubectl rollout 

kubectl rollout history -n <命名空间>  <Pod控制器资源类型>   <资源名称>                                      
kubectl rollout undo -n <命名空间>  <Pod控制器资源类型>  <资源名称>  [--to-revision=N]
kubectl rollout status -n <命名空间>  <Pod控制器资源类型>  <资源名称> 

kubectl rollout history -n xy101 deployment myapp-test01    #查看历史回滚记录
kubectl rollout undo -n xy101 deployment myapp-test01       #撤销上一次的 rollout
kubectl rollout undo -n xy101 deployment myapp-test01 --to-revision=5  #指定回滚版本
kubectl rollout status -n xy101 deployment myapp-test01  #查看回滚状态

5.删除 kubectl delete

kubectl delete -n xy101 deployments.apps myapp-test01 #删除控制器
kubectl delete -n xy101 service test02   #删除service

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值