Kubespray 在 Ubuntu 下的核心执行过程
2022-05-23 18:22:52 0 举报
Kubespray 在 Ubuntu 下的核心执行过程
作者其他创作
大纲/内容
Ansible 配置检查 - 控制端 Ansible 版本 -- ansible_version
Ansible 配置检查 - 受控端操作系统,确保可被远程管理
设置脚本默认变量 -- kubespray-defaults
识别系统版本,判断当前系统下是否有 python3 程序,若没有,则判断是否需要注入 http_proxy 配置用于 python 程序安装
设置系统 hostname -- 此项变更可通过配置 export USE_REAL_HOSTNAME=true 环境变量来规避
K8S 自定义配置检查 + 节点系统配置修改 -- kubernetes/preinstall
swapoff
kubespray 定义的配置检查
Ansible Inventory 配置检查,各角色节点配置的全不全
判断 Kubernetes 安装版本,是否符合最低版本限制 1.21
受控端操作系统版本信息
判断节点系统内核版本
判断节点内存是否满足最小标准
判断节点 hostname 是否符合标准 FQDN 格式,小写字母,数字,连字符
判断 rbac_enabled 是否配置正确
判断 kube_network_node_prefix 配置是否满足 kubelet_max_pods (默认110)
判断 kube_service_addresses / kube_pods_subnet 网段是否存在冲突
判断 dns_mode / resolvconf_mode / kube_proxy_mode 是否在可选范围内
判断是否要通过代理节点下载后续依赖
判断 kata / gvisor 相关配置
判断是否需要自动刷新证书文件
文件目录新建,支持后续配置和数据写入
/etc/resolv.conf 配置判断,注入 /etc/systemd/resolved.conf
systemctl is-active systemd-resolved
依赖的软件包安装, curl / rsync / socat / unzip / e2fsprogs / xfsprogs / ebtables / bash-completion / ipvsadm / ipset
依赖的环境配置修改
Disable IPv6 DNS lookup
Enable ip forwarding
net.ipv4.ip_forward / net.ipv6.conf.all.forwarding
Ensure kube-bench parameters are set
kernel.keys.root_maxbytes
kernel.keys.root_maxkeys
kernel.panic
kernel.panic_on_oops
vm.overcommit_memory 1
vm.panic_on_oom 0
etc/hosts 配置修改
/etc/dhcp/dhclient.conf 配置修改,在文件首行注入
/etc/dhcp/dhclient-exit-hooks.d/zdnsupdate,自动更新脚本
K8S CRI 运行时部署 -- container-engine
判断 kubelet 是否运行 + containerd / docker / crio 是否安装
如果 kubelet / CRI 服务正在运行,则将该节点从集群中剔除,并删除相关的 kubelet / CRI 服务以及相关配置文件
/var/lib/containerd
/etc/containerd
/run/containerd
/etc/systemd/system/containerd.service
之后根据 container_manager 配置安装容器运行时,默认为 containerd
安装 containerd 之前会预先下载 runc / crictl / nerdctl 等相关工具
删除 repo 信息,采用离线安装包的方式下载安装 containerd
确保必要的文件目录存在,并写入相关配置文件 /etc/containerd/config.toml
其他运行时操作方式雷同,此处不做描述
K8S 组件下载 -- download
判断是否采用一次下载到cache多节点共享使用,还是多节点各自独立下载
下载安装 kubeadm ,通过 kubeadm config images list 获取依赖的镜像列表
下载安装 downloads 变量定义的一系列软件以及上述依赖的镜像
当前我采用 Proxy 进行软件包安装,镜像采用 Harbor 托管
K8S Etcd 安装 -- 外置 Etcd 安装部署,考虑到部署复杂度,采用内置方案,所以此处省略 N 个字
K8S 节点服务安装 -- kubernetes/node
将 kubelet 从下载目录拷贝到 bin 目录
安装 loadbalancer,默认配置 nginx-proxy Static Pod
配置 net.ipv4.ip_local_reserved_ports
判断 modinfo br_netfilter 是否开启
配置 bridge-nf-call
net.bridge.bridge-nf-call-iptables / net.bridge.bridge-nf-call-arptables / net.bridge.bridge-nf-call-ip6tables
配置 modprobe kernel module 支持 IPVS
ip_vs / ip_vs_rr / ip_vs_wrr / ip_vs_sh
写入 kubelet.env / kubelet-config.yaml 配置,服务启动
K8S 控制平面安装 -- kubernetes/control-plane
将 kubectl 从下载目录拷贝到 bin 目
写入 kubescheduler-config.yaml
判断是否写入 webhook 配置 (具体用途还没想明白)
判断是否写入 apiserver-audit-policy.yaml
写入 kubeadm-config.yaml 配置
判断是否写入 admission-controls
kubeadm init --config kubeadmin-config.conf --ignore-preflight-errors=all
kubeadm token create --kubeconfig admin.conf
PodSecurityPolicy
kubeadm init phase --config kubeadmin-config.conf upload-certs --upload-certs
其他 controller 节点写入 kubeadm-controlplane.yaml
其他 controller 节点 kubeadm reset -f --cert-dir xxx
kubeadm join --config kubeadmin-controlplane.conf --ignore-preflight-errors=all
kubeadm taint node xxxx control-plane:NoSchedule-
etcdctl 从 etcd 镜像中拷贝到宿主机
auto_rebew_certificates
创建 .kube/config 文件,方便后续运维操作
判断是否要将 .kube/config 拉取到 Ansible 控制端
ClusterRoleBinding
K8S Worker 节点安装
获取 kubeadm token,注入 kubeadm-client.conf
kubeadm join --config kubeadmin-client.conf --ignore-preflight-errors=DirAvailable--etc-kubernetes-manifests
更新 kubelet.conf 配置
更新 kube-proxy configmap,delete kube-proxy pod 之后等待重启 -- 暂时没想明白
kubectl label node xxx
K8S 网络插件 -- network-plugin
默认是 calico,calico 操作好多操作,太晕
K8S 扩展插件 -- 后续更新
0 条评论
下一页