kubernetes资源管理
kubernetes资源以功能分类:
1.工作负载:工作负载型资源用于确保Pod资源对象更好的运行容器化应用。负责运行容器,并且为容器解决环境性依赖,应用程序分为有状态和无状态2种类型。
2.发现与负载均衡:service是kubernetes标准的资源类型之一,用于为工作负载实例提供固的访问入口及负载均衡服务,它把每个可用后端实例定义为Endpoint资源对象,在通过IP地址和端口等属性映射到pod实例或者相应服务端点。Ingress资源则为工作负载提供7层代理及负载均衡功能。
3.配置与存储:kubernetes支持在Pod级别附加Volunme资源对象为容器添加可用的外部存储;kubernetes的ConfigMap资源能够以环境变量或者存储卷的方式接入Pod资源的容器中,并且可以被多个Pod共享引用,从而做到一次修改,多处生效。不过,这种方式不适用存储敏感数据,例如证书,私钥,密码等待,那是另外一个资源类型Secret的功能。
4.集群型资源:集群 型资源不属于任何名称空间,仅仅是由集群管理员操作。常见的集群型资源有:Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding。
【一个应用通常需要多个资源的支撑】
资源对象管理方式:
命令式命令:适用于一次性任务
命令式对象配置:通过对资源配置清单读取要管理的目标资源对象
声明式对象配置:并不直接指明要进行的对象管理操作,而是提供配置清单文件给kubernetes系统,并委托系统来跟踪活动对象的状态变动。资源对象的创建删除及修改操作全部通过唯一命令kubectl apply 来完成,且每次操作时,提供给命令的配置信息会保存在对象的注解信息中,通过进行对比然后变更合并,从而实现仅仅修改变动字段的高级补丁机制。
创建:kubectl apply -f <directory清单所在目录>/
预览:kubectl diff -f <directory>/
更新:kubectl apply -f <directory>/
删除:kubectl delete -f <filename>/
查看:kubectl get -f <filename|url> -o yaml
节点资源:
查看节点资源状态信息:
kubectl describe nodes [NODE]
例如:查看k8s-node01
[root@k8s-master01 ~]# kubectl describe nodes k8s-node01
Name: k8s-node01
Roles: <none>
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/arch=amd64
kubernetes.io/hostname=k8s-node01
kubernetes.io/os=linux
Annotations: flannel.alpha.coreos.com/backend-data: {"VNI":1,"VtepMAC":"fa:d5:bd:76:80:eb"}
flannel.alpha.coreos.com/backend-type: vxlan
flannel.alpha.coreos.com/kube-subnet-manager: true
flannel.alpha.coreos.com/public-ip: 10.122.138.245
kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Thu, 12 Aug 2021 20:21:02 +0800
Taints: <none>
Unschedulable: false
Lease:
HolderIdentity: k8s-node01
AcquireTime: <unset>
RenewTime: Sun, 15 Aug 2021 09:19:25 +0800
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
NetworkUnavailable False Thu, 12 Aug 2021 20:28:43 +0800 Thu, 12 Aug 2021 20:28:43 +0800 FlannelIsUp Flannel is running on this node #true表示网络配置不正确
MemoryPressure False Sun, 15 Aug 2021 09:14:32 +0800 Thu, 12 Aug 2021 20:21:02 +0800 KubeletHasSufficientMemory kubelet has sufficient memory available #true表示内存资源存在压力
DiskPressure False Sun, 15 Aug 2021 09:14:32 +0800 Thu, 12 Aug 2021 20:21:02 +0800 KubeletHasNoDiskPressure kubelet has no disk pressure #true表示磁盘存在压力
PIDPressure False Sun, 15 Aug 2021 09:14:32 +0800 Thu, 12 Aug 2021 20:21:02 +0800 KubeletHasSufficientPID kubelet has sufficient PID available #true表示进程数量存在压力
Ready True Sun, 15 Aug 2021 09:14:32 +0800 Thu, 12 Aug 2021 20:28:45 +0800 KubeletReady kubelet is posting ready status #ready 是true表示节点健康,并且准备好接收pod
Addresses:
InternalIP: 10.122.138.245
Hostname: k8s-node01
Capacity:
cpu: 4
ephemeral-storage: 51175Mi
hugepages-2Mi: 0
memory: 3861288Ki
pods: 110
Allocatable:
cpu: 4
ephemeral-storage: 48294789041
hugepages-2Mi: 0
memory: 3758888Ki
pods: 110
System Info:
Machine ID: 0f2f4b415e294bd3a5a7dd7396b8c86f
System UUID: 4C774D56-F4CB-6D1F-09F4-D23C0E327F7E
Boot ID: 17c45315-7d4a-4fb5-90f7-c6e62a090a42
Kernel Version: 3.10.0-1160.el7.x86_64
OS Image: CentOS Linux 7 (Core)
Operating System: linux
Architecture: amd64
Container Runtime Version: docker://20.10.8
Kubelet Version: v1.19.0
Kube-Proxy Version: v1.19.0
PodCIDR: 10.244.2.0/24
PodCIDRs: 10.244.2.0/24
Non-terminated Pods: (3 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
--------- ---- ------------ ---------- --------------- ------------- ---
default demoapp-5f7d8f9847-nvnnh 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2d10h
kube-system kube-flannel-ds-nhst8 100m (2%) 100m (2%) 50Mi (1%) 50Mi (1%) 2d12h
kube-system kube-proxy-wdfr4 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2d12h
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 100m (2%) 100m (2%)
memory 50Mi (1%) 50Mi (1%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
Events: <none>
考虑到系统维护和硬件升级等等,管理员有时候需要手动重启或者下线某个工作节点:
封锁:
[root@k8s-node01 yaml]# kubectl cordon k8s-node02
node/k8s-node02 cordoned
查看一下:
[root@k8s-node01 yaml]# kubectl get nodes/k8s-node02
NAME STATUS ROLES AGE VERSION
k8s-node02 Ready,SchedulingDisabled <none> 2d13h v1.19.0 #被封锁的节点状态在ready后面多了一个
【注意:封锁工作节点对DaemonSet控制器创建的pod对象无效】
排空节点:
[root@k8s-node01 yaml]# kubectl drain nodes/k8s-node02
node/k8s-node02 already cordoned
error: unable to drain node "k8s-node02", aborting command...
There are pending nodes to be drained:
k8s-node02
解封:
[root@k8s-node01 yaml]# kubectl uncordon k8s-node02
node/k8s-node02 uncordoned
[root@k8s-node01 yaml]# kubectl get nodes/k8s-node02
NAME STATUS ROLES AGE VERSION
k8s-node02 Ready <none> 2d13h v1.19.0
标签与标签选择器
浙公网安备 33010602011771号