标准的k8s集群有三个组成部分
管理控制节点、计算节点、私有镜像仓库。
管理控制节点的功能:
提供集群的控制
对集群进行全局决策
检测和响应集群事件
管理控制节点中有四大核心服务
服务 | 端口 | 含义 | 用途 |
APIServer | 6443 | api接口 | 负责接收请求,实现功能 |
Scheduler | 10259 | 调度器 | 负责调度pod到不同的计算节点 |
ControllerManager | 10257 | 控制器管理器 | 负责管理各个控制器 |
etcd | 2379-2380 | 数据库 | 负责存储集群中的元数据(运行数据) |
计算节点的功能:
运行容器的实际节点
提供运行环境
在多个节点上运行
水平扩展
计算节点的核心组件:
kubelet
kube-proxy
Runtime
服务 | 端口 | 含义 | 用途 |
kubelet | 10250 | 每个节点都得有,包括master | 节点代理服务 |
kube-proxy | 10256 | 每个节点都得有,包括master | 网络通讯与负载均衡 |
Runtime | 符合OCI标准的,能创建容器的软件,比如containerd、podman |
镜像仓库用Harbor
可以做镜像的同步复制,也可以做负载均衡
主控节点初始化
]# kubeadm init --config=init/init.yaml |tee init/init.log
]# cat init.yaml
---
kind: InitConfiguration # 初始化配置
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: xxx
ttl: 24h0m0s
usages:
- signing
- authentication
localAPIEndpoint:
advertiseAddress: 192.168.1.50
bindPort: 6443
nodeRegistration:
criSocket: unix:///run/containerd/containerd.sock
imagePullPolicy: IfNotPresent
name: master
taints: null
---
kind: ClusterConfiguration # 集群配置
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: harbor:443/k8s
kubernetesVersion: 1.29.2
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.245.0.0/16
scheduler: {}
---
kind: KubeProxyConfiguration # kube-proxy配置
apiVersion: kubeproxy.config.k8s.io/v1alpha1
mode: ipvs
ipvs:
strictARP: true
---
kind: KubeletConfiguration # kubelet配置
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd
说到这里
可以比较明确的一点是
k8s的master节点
初始化是用命令行运行文件,
加上一些环境的配置,可以实现。
相对来说,
要实现k8s集群的高可用
核心点就是在etcd数据库的高可用
etcd数据库的高可用
一种方式是对master节点进行高可用
配置3台以上的master节点
每个节点上运行数据库
以此实现高可用
另一种方式
是把etcd从master节点独立出来
在集群外部做一个etcd集群
k8s集群需要与
etcd数据库集群进行交互
可以通过接口交互,
etcd独立于master节点
进行高可用的管理。
标签:init,集群,etcd,组件,master,k8s,节点 From: https://blog.csdn.net/2401_84019227/article/details/142434607