k8s技术图谱
2022-04-28 15:53:25 0 举报
AI智能生成
涉及核心主键、服务、网络、存储等
作者其他创作
大纲/内容
核心组件
etcd
key-value存储单元,存储集群所有状态,如pod、node
api server
所有操作入口
controller manager
控制器管理,提供了一个分发事件的能力
scheduler
通过调度算法合理分配pod
kubelet
kube proxy
网络代理
container runtime
docker
...
kubectl
封装api server的api来开放命令行操作k8s
Pod
pause
负责共享network、volume
pod
通过container:xxid,来指定与pause共用网络
Node
node
node controller
Endpoint
Running的pod节点(ip + port)
控制器
namespace controller
endpoint controller
Deployment
确保同一个组pod高可用
DaemonSet
确保每个node运行一个特定的pod
StatefulSet
针对有状态服务
job controller
cronjob controller
...
服务发现
service
类型
clusterIp
nodePort
loadBalancer
方式
iptables
通过chain、rule策略进行转发
ipvs
linux内核层负载均衡策略,采用了hash算法,比iptbales更高效(iptables为线性规则匹配),支持更多的负载均衡算法,可以通过ipvsadm操作
ingress
ingress
ingress controller
ingress-nginx
通过nginx lua插件实现配置文件的自动变更
openresty
网络
namespace
空间
veth pair
找出veth网卡配对方法:容器内部ip a查看找出索引,如eth0@if20(索引为20),在宿主机通过如下命令查找:grep -rn “索引” /sys/devices/virtual/net/*/ifindex
cni
flannel - 覆盖网络
修改了路由表,使得集群走fannel:1网络接口,并在tcp/udp协议上进行2次封装,使得可以正常到达对应的pod
eth0 - fannel.1 - cn0 - pod
dns
原理:通过search domain,依次放置mynamespce.svc.cluster.local、svc.cluster.local、cluster.local;这样如果是在同一个namespace下直接通过pod名称就可以访问,如果是不同namespace,通过podname.namespace就可以访问
方案
kubedns
coredns
支持插件化,可扩展
存储
PV
StorageClass
用于动态创建PV
PV
PVC
local PV
需要指定nodeAffinity
volume
hostPath
emptyDir
临时目录,随着pod销毁而消失
nfs
glusterfs
configMap
配置中心
Secret
类型
Opaque
字段分开显示,值直接使用使用base64解码
Service Account
用于pod访问api service认证使用
kubernetes.io/dockerconfigjson
内容存放于data:.dockerconfigjson下,并用base64进行一次解码,kubectl get secret -n xxx xxx -o jsonpath=“{.data.\.dockerconfigjson}”|base64 -d
helm.sh/release.v1
内容存放于data:release,需要使用base64 2次解码,并使用gunzip解压,kubectl get secret -n xxx xxx -o jsonpath=“{.data.release}”|base64 -d|base64 -d|gunzip -c
包管理
Helm
Chart.yaml
Values.yaml
定义一堆变量
templates
k8s资源模版,可以读取Values.yaml配置的变量
访问控制
Role
ClusterRole
RoleBinding
查看users、groups、ServiceAccount与Role绑定关系
ClusterRoleBinding
常见命令
helm
helm repo add xxx url
helm repo update
helm install 名称 chart
kubectl
kubectl get pod/ingress/pvc/sc/… -n namespace
kubectl describe pod/ingress/pvc/sc/… 资源名 -n namespace
kubectl -n namespace exec pod名称 -it xxx — sh
kubectl -n namespace logs -f —tail 100 pod资源名
kubectl apply xxx.yaml
kubectl get xx -o yaml/wide/json
0 条评论
下一页