K8s陈述式资源管理

命令行:kubectl命令行工具

  • 优点:90%以上的场景都可以满足

对资源的增删改查比较方便,对改不是很友好。

  • 缺点:命令比较冗长,复杂,难记

声明式:

看到声明式都是k8s当中的yml文件来实现资源管理。

GUI:

图形化工具

kubectl命令的详解,查看,部署,查看pod的情况(详细信息,日志,发布和回滚)

相关命令字典:Kubernetes kubectl 命令表 _ Kubernetes(K8S)中文文档_Kubernetes中文社区

k8s中基本管理信息的查看

查看k8s的版本

查看k8s的版本
kubectl version

K8s陈述式资源管理_第1张图片

k8s中所有资源对象和资源对象的简写

kubectl api-resource

K8s陈述式资源管理_第2张图片

k8s的集群信息

kubectl cluster-info

查看master节点的状态

kubectl get cs

K8s陈述式资源管理_第3张图片

查看node节点的状态

kubectl get pod
查看默认命名空间内的pod信息

kubectl get ns
查看当前集群所有的命名空间

kubectl get pod -n kube-system
-n来声明查看指定命名空间的资源

kubectl get pod -o wide 
查看默认命名空间内pod的详细信息

K8s陈述式资源管理_第4张图片

kubectl get pod -n kube-system
-n来声明查看指定命名空间的资源

K8s陈述式资源管理_第5张图片

kubectl get pod -o wide 

查看默认命名空间内pod的详细信息

查看指定命名空间的pod

 kubectl get pod -n kube-system -o wide

K8s陈述式资源管理_第6张图片

kubectl get node
查询节点的信息和状态

kubectl get node -o wide
查看node节点的详细信息

K8s陈述式资源管理_第7张图片

如何查看pod的详细信息

查看已经部署好的pod的详细信息

kubectl get node
查看


详细查看
kubectl describle pod myapp-hj-567cb4489c-fq2fd

如果查看指定命名空间的内容,一定要加-n,不加则显示默认

K8s陈述式资源管理_第8张图片

如何查看pod内部的日志

kubectl logs -f myapp-hj-567cb4489c-fq2fd


kubectl logs -n kube-system etcd-master01
kubectl create ns zzr

kubectl delete ns zzr

K8s陈述式资源管理_第9张图片

kubectl delete pod myapp-hj-567cb4489c-fq2fd
先声明动作,再跟上对象,最后是对象的名称

pod的部署

deployment的部署pod:

陈述式部署:命令行

声明式:yml文件部署

滚动更新:不是一次性的把所有pod全部部署,而是一个一个来。pod的更新时使用,逐步引入新的pod,逐步减少旧的pod。

自我修复:如果有pod节点发生故障,deployment会自动启动新的pod来进行代替。

回滚:如果更新有问题,deployment会提供还原点,可以手动还原到未更新前的状态。

扩容和缩容:deployment可以随时调整pod的数量,以适应流量的变化。

上述的功能必须是基于deployment创建的服务才可以。绝大多数服务都是通过deployment来进行创建的

K8s陈述式资源管理_第10张图片

daemonset:不能通过命令行创建,只能在yml文件中定义这种创建方式。

后台运行创建,在每一个节点上都创建一个相同方式的,相同版本的容器运行的pod。

一般都是依赖环境和重要组件,一般也不会对这些资源进行操作。

K8s陈述式资源管理_第11张图片

K8s陈述式资源管理_第12张图片

 kubectl get pod -n zzr


kubectl create deployment nginx-hj --image=nginx --replicas=3 -n zzr

kubectl get pod -n zzr

-n:指定命名空间

如果是基于deployment方式创建的pod,或者是daemonset方式创建的pod,是由控制器创建的pod,使用delete删除pod是删不掉的,相当于重启,

K8s陈述式资源管理_第13张图片

不是基于控制器创建的pod,是直接删除

K8s陈述式资源管理_第14张图片

远程进入节点容器

 kubectl exec -it nginx-zzr-6bdd8bcbb5-c5tdv bash

K8s陈述式资源管理_第15张图片

docker的exec只能在本机内使用,不能跨主机,kubectl exec可以跨主机进入容器

kubectl create deployment nginx-zzr --image=nginx --replicas=3 -n zzr

 kubectl exec -it nginx-zzr-6bdd8bcbb5-8ph4k bash -n zzr

 root@nginx-zzr-6bdd8bcbb5-8ph4k:/# echo k8s-nginx > /usr/share/nginx/html/index.html

 root@nginx-zzr-6bdd8bcbb5-8ph4k:/# echo k8s-nginx > /usr/share/nginx/html/index.html

K8s陈述式资源管理_第16张图片

如果有容器一直卡在“销毁”状态:

kubectl delete pod 容器名 --force --grace-period=0

grace-period:表示过度存活期,默认是30秒。可以让pod优雅的结束容器内的进程,然后退出pod

=0:立刻停止pod,必须要有force才能实现

主要是用于结束卡在销毁状态的pod

对deployment创建的pod进行扩容和缩容

 kubectl scale deployment 容器名 --replicas=所需副本数


 kubectl scale deployment myapp-hj --replicas=2

K8s陈述式资源管理_第17张图片

如何把服务的service进行发布

service的类型:

kubectl get svc:查看当前命名空间的service

ClusterIP:

创建service的默认类型,提供一个集群内部的虚拟IP地址,这是service的默认类型。通过这个虚拟IP会直接访问pod的资源,无法对外提供访问。

NodePort:

会在每一个node节点上都开放一个相同的端口。外部可以通过node的本机ip+端口,访问pod资源。集群外部访问service资源的一种方式。四层代理方式。

nodeip:nodeport

随即指派,也可以指定30000-32767

基于deployment的创建方式

kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

kubectl get svc
NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.96.0.1              443/TCP        24h
myapp-zzr       ClusterIP   10.96.38.125           30000/TCP      20h
nginx-service   NodePort    10.96.181.60           80:31989/TCP   2s


10.96.232.240  集群内部的IP地址,外部是不可以访问这个IP地址

80:对应的是内部的service端口

31989:和内部的service的80端口做映射

K8s陈述式资源管理_第18张图片

kubectl expose deployment nginx1 --port=8080 --target-port=80 --name=nginx1-service --type=NodePort

--port=8080:service和容器映射的端口,可以是任意
--target-port=80:容器内部的服务端口

如何实现负载均衡

K8s陈述式资源管理_第19张图片

K8s陈述式资源管理_第20张图片

kubectl edit svc nginx-service
修改nodeport端口。

LoadBalancer:

如果service的类型设定为LoadBalancer,映射地址(云平台提供LoadBalancer地址)

公有云服务供应商在云平台上设置的service的场景。外部来访问,实现负载均衡。LoadBalancer这个地址是要付费的。

创建好了service,指定类型为LoadBalancer,会提供一个地址来代理pod内部的IP地址。

K8s陈述式资源管理_第21张图片

ExternalName:

DNS映射,给service分配一个域名,通过域名来访问后端pod资源。ExternalName的service类型,不能提供负载均衡,必须要设置一个LoadBalancer才可以实现。

K8s陈述式资源管理_第22张图片

K8s陈述式资源管理_第23张图片

做映射对外提供访问是nodeport

ExternalNmae需要映射

LoadBalancer需要花钱

更新和回滚以及发布的方式:

项目的生命周期:

创建------》发布------》更新-------》回滚------》删除

如何回滚:

查看回滚点:

kubectl rollout history deployment nginx1
数字越大,就是最近的操作

K8s陈述式资源管理_第24张图片

如何给回滚点加表示

 kubectl set image deployment nginx1 nginx=nginx:1.15 --record

K8s陈述式资源管理_第25张图片

kubectl rollout undo deployment nginx1 --to-revision=1

如何查看

1.kubectl rollout status deployment nginx1

K8s陈述式资源管理_第26张图片

2.kubectl get pod -w

K8s陈述式资源管理_第27张图片

kubectl rollout history deployment nginx1

kubectl get all
查看所有集群的信息

你可能感兴趣的:(linux,运维,服务器)