K8S的资源管理
K8S的资源管理
管理K8S资源的三种基本方法:
- 陈述式资源管理方法-使用cli工具进行管理。
- 声明式资源管理方式-主要依耐资源配置清单。
- GUI式资源管理方法-主要依耐图形界面。
陈述式资源管理方法
1.1 查看名称空间
kubectl get namespace
kubectl get ns
# 查看名称空间中的所有资源,不带-n默认就是查询default中的资源
kubectl get all -n default
1.2 创建名称空间
kubectl create namespace app
1.3 删除名称空间
# 删除名称空间会删除里面的所有资源
kubectl delete namespace app
app 名称空间名称
管理Deployment资源
Replica Set ------------------------------ 副本集
Deployment为Pod和Replica Set(升级版的 Replication Controller)提供声明式更新。
你只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。您可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。
注意:您不该手动管理由 Deployment 创建的 Replica Set,否则您就篡越了 Deployment controller 的职责!下文罗列了 Deployment 对象中已经覆盖了所有的用例。如果未有覆盖您所有需要的用例,请直接在 Kubernetes 的代码库中提 issue。
典型的用例如下:
- 使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败。
- 然后,通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新的ReplicaSet中。
- 如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。
- 扩容Deployment以满足更高的负载。
- 暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。
- 根据Deployment 的状态判断上线是否hang住了。
- 清除旧的不必要的 ReplicaSet。
2.1 创建deployment
kubectl create deployment nginx-dp --image=harbor.od.com/public/nginx:v1.17.9 -n kube-public
nginx-dp # 创建的名字
--image # 需要镜像
-n # 创建在那个名称空间
kubectl get pods -n kube-public -o wide
-o wide # 以扩展的方式查看
2.2 查看deployment
kubectl get deployment
kubectl get deployment -n kube-public
-o wide # 查看扩展信息
2.3 删除deployment
kubectl delete deployment nginx-dp -n kube-public
2.4 删除pod资源~重启
kubectl delete pod <pod-name> -n namespace
kubectl delete deploy nginx-dp -n kube-public
# 如果删除了pod,没有删除控制器,控制器会让pod达到一个预设置的状态,所以pod会自动的拉起来。这也是重启pod的一种方法。
# 强制删除
kubectl delete pod nginx-ds-trrwk --grace-period=0 --force
强制删除
kubectl delete pod nginx-ds-trrwk --grace-period=0 --force
管理service资源
1.现在可以看到创建的pod IP是172.7.22.3
2.当我们使用 kubectl delete pod nginx-dp -n kube-public 命令,删除pod之后再次查看,发现pod已经重新调度到了新的节点上面,而且pod的IP也更改了。
在实际应用中如果是pod挂了,IP地址发生了改变,这样就会影响业务。所以`service`资源就是来解决这个问题的。
3.1 创建service资源
# 创建一个service资源,暴露一个端口。提供固定的业务访问接口。
kubectl expose deployment nginx-dp --port=80 -n kube-public
#把nginx-dp的副本数改为2
kubectl scale deployment nginx-dp --replicas=2 -n kube-public
scale # Set a new size for a Deployment, ReplicaSet, Replication Controller, or Job
# 设置一个新的deployment、副本数、Replication Controller。
更改为了两个pod
创建的service资源,并且提供了一个CLUSTER-IP
----------192.168.145.91,这样不管是pod的IP怎么变化始终service提供的接口IP是不会变化的。
底层原理,通过LVS进行转发,同时还起到了负载均衡的效果。
3.2 查看svc
kubectl describe service -n kube-public
kubectl describe svc -n kube-public
describe # 显示详细的信息
总结
陈述式资源管理方法可以满足90%以上的资源管理需求,但它的缺点也很明显:
- 命令冗长
- 特定场景下,无法实现需求
- 对资源增、删、查操作比较容易,改的话就非常不方便。
声明式资源管理方法
声明式资源管理方法,使用-----资源配置清单(yaml\json)
获取资源配置请单
[root@hdss7-21 ~]# kubectl get svc nginx-dp -n kube-public -o yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2021-04-13T07:21:39Z"
labels:
app: nginx-dp
name: nginx-dp
namespace: kube-public
resourceVersion: "40542"
selfLink: /api/v1/namespaces/kube-public/services/nginx-dp
uid: 92efaf9c-0af4-4576-ad03-12cec6fdfb35
spec:
clusterIP: 192.168.145.91
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-dp
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
# 必须要有的三个段
apiVersion:
kind:
metadata:
spec:
# 查看帮助文档
kubectl explain deployment.kind
使用资源配置清单暴露service接口
cat>>nginx-ds-svc.yaml<<EOF
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-ds
name: nginx-ds
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-ds
type: ClusterIP
EOF
# 应用资源配置清单
kubectl apply -f nginx-ds-svc.yaml
# 查看资源
kubectl get svc nginx-ds -o wide
离线更改service暴露的端口
vi nginx-ds-svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-ds
name: nginx-ds
namespace: default
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 80
selector:
app: nginx-ds
type: ClusterIP
[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml
service/nginx-ds configured
在线更改
kubectl edit svc nginx-ds
删除资源配置
陈述式删除
kubectl delete svc nginx-ds
声明式
kubectl delete -f nginx-ds-svc.yaml