k8s集群自动化部署03——Ansible安装k8s集群组件
·
#k8s安装# #Ansible#
1、修改镜像
这里用了yun_repository模块,默认生成/etc/yum.repos.d/{{ name }}.repo,如果目标.repo文件已存在且内容完全一致,则不会重复写入,也不会触发changed状态。安装时启用GPG校验,防止安装被篡改的软件包。
- name: Add Kubernetes yum repository (Aliyun mirror)
yum_repository:
name: kubernetes
description: Kubernetes
baseurl: "https://mirrors.aliyun.com/kubernetes-new/core/stable/v{{ kubernetes_version }}/rpm/"
enabled: yes
gpgcheck: yes
gpgkey: "https://mirrors.aliyun.com/kubernetes-new/core/stable/v{{ kubernetes_version }}/rpm/repodata/repomd.xml.key"
when: ansible_os_family == "RedHat"
2、安装组件
kubelet:节点专属代理服务,与APIServer长轮询通信;
kubeadm:worker加入集群、升级、重置;
kubectl:集群运行本不依赖,但全节点安装以方便调试,也方便运维脚本调用kubectl与APIServer交互,当master节点临时故障时也可以从任意节点连接集群作为应急操作入口,但切忌不要把高权限kubeconfig文件放在各个节点上,要合理规划权限。
- name: Install kubelet, kubeadm, kubectl (latest in version series)
yum:
name:
- "kubelet-{{ kubernetes_version }}*"
- "kubeadm-{{ kubernetes_version }}*"
- "kubectl-{{ kubernetes_version }}*"
state: latest
update_cache: yes
when: ansible_os_family == "RedHat"
3、配置开机自启
这里可能有一个问题,但也没什么大的影响。由于kubelet还没有配置文件,那么必定会启动失败,为什么还要尝试启动一下?原因如下:
①在手动安装的过程中,提前启动一次可以发现一些潜在问题,比如二进制文件损坏、依赖确实、Systemd unit文件路径错误等,而不是等到后面初始化的时候才发现kubelet其实没有装好;
②让systemd进入“预管理”状态,当启动kubelet时,即使它立刻退出,Systemd也会把它纳入管理,每隔几秒自动尝试重启,那么后续执行kubeadm init或kubeadm jion生成配置文件后,kubelet会在下一次自动重试时立即成功启动,无需手动启动;
Ansible中的failed_when:false的作用:Ansible默认遇到Systemd启动失败会中断整个playbook,通过此参数忽略预期的启动失败,继续后续任务。
- name: Reload systemd daemon
systemd:
daemon_reload: yes
- name: Enable kubelet service
systemd:
name: kubelet
enabled: yes
# 由于缺少 kubelet 配置文件,首次启动会失败,此行为符合预期
- name: Attempt to start kubelet (expected to fail before kubeadm init)
systemd:
name: kubelet
state: started
failed_when: false
更多推荐
所有评论(0)