你不知道的 K8s 组件优缺点,惊了个呆。。
01 Label
PS:如果您的 Pod 长这样,那需要打标签了。
如何打 Label
K8s 不仅可以给资源打标签,还可以通过标签选择器筛选出你想要的对象。
-
列出标签
kubectl get po --show-labels
-
只展示特定标签
kubectl get po -L label1, label2 /
-
为已创建的 Pod 添加标签
kubectl label po xxxx xxxx=manual
-
为节点添加标签
kubectl label node gke-kubia-8f56-node-0rrx gpu=true
-
通过标签选择器列出节点
kubectl get node -l gpu=true
当然,Label 也有不足:例如 Label 在集群中不是唯一标识,不能自动更新,需要手动更新或删除,对于大规模的集群管理,会带来复杂度。 02 namespace
命名空间是 K8s 集群级别的资源,它的适用场景与标签不同,适合于跨多个团队或项目,K8s 默认会有一个 Default 命名空间,还有几个命名空间用于特定的目的,例如 kube-system 主要运行系统级资源等等。 可以通过 kubectl get ns 可以查看 namespace 资源: # kubectl get namespace/ns(缩写)
NAME STATUS AGE
default Active 102d
kube-node-lease Active 102d
kube-public Active 102d
kube-system Active 102d
test Active 61d
# 查看详细命名空间信息情况
# kubectl describe namespace default
Name: default
Labels: <none>
Annotations: <none>
Status: Active
No resource quota.
No LimitRange resource.
…省略部分信息…
管理 namespace 资源
namespace资源属性较少,通常只需要指定名称即可创建,如“kubectl create namespace qa”。 namespace 资源的名称仅能由字母、数字、下划线、连接线等字符组成。 删除 namespace 资源会级联删除其包含的所有其他资源对象。 # 创建新的命名空间资源信息:# kubectl create ns test
namespace/test created
# kubectl get ns
NAME STATUS AGE
test Active 4s
# 删除已有命名空间资源信息:# kubectl delete ns test --- 删除操作比较危险,慎用
- 创建指定命名空间
# kubectl create ns test
# kubectl get ns test
NAME STATUS AGE
test Active 61d
-
切换指定命名空间:
切换命名空间后,kubectl get pods 如果不指定-n,查看的就是 kube-system 命名空间的资源了。
# kubectl config set-context --current --namespace=kube-system
Context "kubernetes-admin@kubernetes" modified.
说明:表示从默认所在的default的命名空间状态,切换到指定的命名空间资源中
# kubectl get pods
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-6949477b58-5dqv4 1/1 Running 1 61d
calico-node-4ggj8 1/1 Running 1 102d
calico-node-4rmhx 1/1 Running 1 102d
calico-node-5xmjw 1/1 Running 2 102d
coredns-7f89b7bc75-krpzf 1/1 Running 1 61d
coredns-7f89b7bc75-qvj5m 1/1 Running 1 61d
etcd-k8s-master-01 1/1 Running 1 102d
etcd-k8s-master-02 1/1 Running 1 102d
kube-apiserver-k8s-master-01 1/1 Running 1 102d
kube-apiserver-k8s-master-02 1/1 Running 1 102d
kube-controller-manager-k8s-master-01 1/1 Running 4 102d
kube-controller-manager-k8s-master-02 1/1 Running 4 102d
kube-proxy-2zrtt 1/1 Running 1 102d
kube-proxy-dcxsv 1/1 Running 2 102d
kube-proxy-hs8x2 1/1 Running 1 102d
kube-scheduler-k8s-master-01 1/1 Running 4 102d
kube-scheduler-k8s-master-02 1/1 Running 4 102d
# kubectl config set-context --current --namespace=default
Context "kubernetes-admin@kubernetes" modified.
# 说明:表示从指定的命名空间所在的状态,切换到default的命名空间资源中
# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-test-75c685fdb7-6g5m7 1/1 Running 1 61d
nginx-test-75c685fdb7-6j9s8 1/1 Running 1 61d
pod-first 1/1 Running 0 54m
当然,关于命名空间这里只是介绍了基础,还有多租户、隔离等相关内容没有介绍。 关于使用 kubeConfig 高效切换命名空间的方法,也欢迎各位专家指正。 03 Service
Service 是用于在 K8s 集群内暴露一组 Pod 访问入口的抽象对象。它提供了一个稳定的 IP 地址和 DNS 名称,使得外部应用程序能够通过服务访问指定的一组 Pod。服务还提供了负载均衡机制,以便将流量分发到具有相同标签选择器的多个 Pod 上。 如果您觉得 Pod 或一组 Pod 可以直接对外提供服务,那这里您可要好好看了,因为 Pod 提供 IP 不是永久的,并且 Pod 的 IP 地址是集群内部的,不能从外部访问。 Service 架构图 要让 Pod 能从外部访问,K8s 提供了一种机制——Service 来提供对外的访问,Service 也是一种特殊的 LoadBalancer 类型服务。 另外,Pod 生命周期完成后是会被销毁的,重新创建的 Pod 会有新的 IP 地址、主机名和进程,如果单纯只有 Pod,不利于 K8s 大规模的服务与管理。
当然,Service 也有缺点,比如 Service 只支持四层负载均衡,在实现七层负载均衡时候,Service 不支持,官方推荐的 Ingress 也有一些问题,这里暂且不涉及这方面内容,更多四层和七层的内容,请关注下篇。 04 小结
在 K8s 中,从架构方面了解 K8s 固然没有错,如果一直停留在架构图层面,就不够了。需要深入挖掘、善于实践、抽丝剥茧。 本文从 Label 入手,强调了打标签的重要性,也涉及了命名空间,注意:这里的命名空间需要与 Linux 的命名空间区分开~,还涉及了 Service 方面的内容。 当然,本文还有很多没有涉及到的地方,如 RC、探针、DeamonSet 等方面的内容,更深入的内容,也欢迎广大网友投稿。 最后,本文可能有不准确的地方,欢迎各位专家批评指正。 点击下方名片,即可添加★星标★
AIGC 浪潮来袭?如何理性看待 AIGC 浪潮下的软件研发趋势?6月29日,DOIS DevOps 国际峰会 2023 · 北京站,中国农业农行、中信银行等重磅嘉宾超强上线,你不了解一下? 近期好文:
到底要多 “牛X” 的网络,才能带得动 AIGC?
“高效运维”公众号诚邀广大技术人员投稿
投稿邮箱:jiachen@greatops.net,或添加联系人微信:greatops1118。 点个“在看”,一年不宕机
发表评论