K8S 全面 知识点

一.K8S的组件

1.Control Plane Components

做出全局决策 比如资源调度

1.kube-apiserver

负责处理接受请求的工作(可以多个)2.etcd

高可用数据库3.kube-scheduler

负责监视新创建的、未指定运行节点(node)的 Pods4.kube-controller-manager 

节点控制器 任务控制器 端点控制器5.cloud-controller-manager

允许你将你的集群连接到云提供商的 API 之上, 并将与该云平台交互的组件同与你的集群交互的组件分离开来

node


kubelet

它保证容器(containers)都运行在 Pod 中。
kube-proxy

集群中每个节点(node)所上运行的网络代理
Container Runtime

容器运行环境是负责运行容器的软件


Addons


DNS
Web 界面
容器资源监控
集群层面日志

二. Kubernetes 对象

Kubernetes 对象 是持久化的实体
Kubernetes 对象是目标性记录 一旦创建该对象,Kubernetes 系统将不断工作以确保该对象存在


对象规约(Spec)与状态(Status)
它们负责管理对象的配置
对于具有 spec 的对象,你必须在创建对象时设置其内容,描述你希望对象所具有的特征: 期望状态(Desired State)

1.Kubernetes 对象管理


kubectl diff -R -f configs/
kubectl apply -R -f configs/

2.对象名称和 IDs


集群中的每一个对象都有一个[名称] (#names)来标识在同类资源中的唯一性。 在一个名称空间中 pod和Deployment 都可以叫myapp-1234 ,但是不能有两个name=myapp-1234的pod
每个 Kubernetes 对象也有一个 [UID](#uids)来标识在整个集群中的唯一性。

3.名称空间


kubectl get namespace
kubectl create namespace xzqtest #不能用下划线 不符合规定
kubectl run nginx --image=nginx --namespace=<名字空间名称>
kubectl get pods --namespace=<名字空间名称>
#设置默认的名称空间
kubectl config set-context --current --namespace=<名字空间名称> #
# 验证
kubectl config view --minify | grep namespace:

4.名字空间和 DNS


创建一个 service 会自动创建dns

pod与Service 的 DNS

Kubernetes 为 Service 和 Pod 创建 DNS 记录 你可以使用一致的 DNS 名称访问 Service

Service 的名字空间

DNS 查询可能因为执行查询的 Pod 所在的名字空间而返回不同的结果 你在哪个pod查询dns 结果都不同
2.要查询dns必须指定名称空间 否则限制pod的名称空间内
3.要访问其他名称空间的 service 需要dns查询指定的名称空间
test : pod >
pod : service data
test的pod 查 data这个service 时 查不到 指定了 data.pod时 查到了
DNS 记录
Services
Pods
PODS aaa记录
POD 的hostname
1.hostname字段
2.建 Pod 时其主机名取自 Pod 的 metadata.name 值
POD 的subdomain
域名为 hostname.subdomain.namespace.svc.cluster-domain.example
# 位于名字空间中的资源
kubectl api-resources --namespaced=true

# 不在名字空间中的资源
kubectl api-resources --namespaced=false

标签

1.标签前缀是可选的 如果要必须是 子域
2.标签选择算符
api
, 标识 and
基于等式的 = ==,!=
基于集合的需求
environment in (production, qa)
tier notin (frontend, backend)
partition 包含了有 partition 标签的资源
!partition 没有 partition 标签的资源

3.api
kubectl get pods -l 'environment in (production, qa)'


4.
在 API 对象中设置引用

Finalizers


在某些动作完成 再清理你标记为finalizers的对象 你可以做垃圾清理之类的动作
如果你删除了一个资源对象(指定了 Finalizer)
那么 他会对 资源对象 填充 metadata.deletionTimestamp 说明删除的时间
此时控制平面或其他组件会采取 Finalizer 所定义的行动 而目标对象仍然处于终止中
这些行动完成后,控制器会删除目标对象相关的 Finalizer

kubernetes.io/pv-protection 例子

它是防止 PersistentVolume 被意外删除

当PersistentVolume 被pod 引用时会自动加入Finalizers

所以当pod没有被引用会立马删除

当有Finalizers 进入Terminating

直到你删除了pod引用的PersistentVolume

那么PersistentVolume会释放Finalizers 然后系统删除了

属主引用 Owner references, labels, and finalizers

3.owners 和 Dependents

ReplicaSet 是一组 Pod 的属主 owners

replicaset是pod的附属(Dependent)

 
对象规约中的属主引用

metadata.ownerReferences 用于引用其属主对象

ownerReferences.blockOwnerDeletion

用于控制特定的附属对象是否可以阻止垃圾收集删除其属主对象

字段选择器

字段选择器

“字段选择器(Field selectors)”允许你根据一个或多个资源字段的值 筛选 Kubernetes 资源。 下面是一些使用字段选择器查询的例子:

二.总结知识点

:kubelet 会告诉容器 使用 dns serveice 的ip 来解析 dns名称 所以 /etc/resolv.conf 这个是kubelet 为他生成的
名字空间 test 中的 Pod 可以成功地解析 data.prod 或者 data.prod.svc.cluster.local
pod的域名是 hostname.subdomain.namespace.svc.cluster-domain.example 规定的

标签的前缀是可选的 前缀必须是dns子域名

三.命令记录

#查看pod内的容器
kubectl get pod POD_NAME_HERE -o jsonpath="{.spec['containers','initContainers'][*].name}" -n namespace

四.YAML记录


# 使用内存 编写 yaml 并执行

cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ConfigMap
metadata:
name: mymap
finalizers:
- kubernetes
EOF

##在线修改资源对象
kubectl patch configmap/mymap \
--type json \
--patch='[ { "op": "remove", "path": "/metadata/finalizers" } ]'

.课后疑问点

1.EndpointSlice 是什么

2.节点自注册和join 区别


###

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值