企业 DevOps + 协同办公 + 可观测性 + 网络基础设施平台-Part 15.10 Kubernetes Role

本部分生成生产级 Kubernetes 自动化安装 Role

目标:

  • containerd Runtime
  • kubeadm安装
  • Kubernetes HA Cluster
  • Master初始化
  • Worker自动加入
  • Calico CNI
  • MetalLB
  • CoreDNS
  • kube-proxy
  • Metrics Server
  • StorageClass准备
  • RBAC基础配置

支持:

复制代码
Ubuntu 22.04
Ubuntu 24.04

Kubernetes:
v1.30+
v1.31+

Runtime:
containerd 2.x

15.10.1 Kubernetes目录

创建:

复制代码
roles/kubernetes/

├── defaults/
│   └── main.yml
│
├── tasks/
│   ├── main.yml
│   ├── repo.yml
│   ├── containerd.yml
│   ├── install.yml
│   ├── master.yml
│   ├── worker.yml
│   └── addons.yml
│
├── templates/
│   ├── containerd-config.toml.j2
│   └── kubeadm-config.yaml.j2
│
├── handlers/
│   └── main.yml
│
└── files/

15.10.2 Kubernetes变量

文件:

复制代码
roles/kubernetes/defaults/main.yml

---

kubernetes_version: "1.31.0"


kubernetes_packages_version:
  "1.31.0-1.1"


pod_network_cidr:

  192.168.0.0/16


service_cidr:

  10.96.0.0/12


container_runtime:

  containerd


kubernetes_control_plane_endpoint:

  k8s-api.company.com:6443


calico_version:

  v3.29.1


metallb_version:

  v0.14.8


kube_user:

  root

15.10.3 Kubernetes Playbook

文件:

复制代码
playbooks/kubernetes.yml

---

- name:

    Install Kubernetes


  hosts:

    kubernetes_master:kubernetes_worker


  become:

    true


  roles:


    - kubernetes



- name:

    Init Kubernetes Master


  hosts:

    kubernetes_master[0]


  become:

    true


  roles:


    - role:

        kubernetes

      tasks_from:

        master.yml



- name:

    Join Workers


  hosts:

    kubernetes_worker


  become:

    true


  roles:


    - role:

        kubernetes

      tasks_from:

        worker.yml



- name:

    Install Kubernetes addons


  hosts:

    kubernetes_master[0]


  become:

    true


  roles:


    - role:

        kubernetes

      tasks_from:

        addons.yml

15.10.4 安装Kubernetes仓库

文件:

复制代码
roles/kubernetes/tasks/repo.yml

---

- name:

    install dependencies


  apt:


    name:


      - apt-transport-https

      - ca-certificates

      - curl

      - gpg


    state:

      present



- name:

    add kubernetes key


  shell:


    cmd:

      |
      curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key |
      gpg --dearmor -o /etc/apt/keyrings/kubernetes.gpg



- name:

    add kubernetes repo


  apt_repository:


    repo:

      deb [signed-by=/etc/apt/keyrings/kubernetes.gpg]
      https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /


    state:

      present

15.10.5 安装kubeadm

文件:

复制代码
roles/kubernetes/tasks/install.yml

---

- name:

    install kubernetes packages


  apt:


    name:


      - kubelet

      - kubeadm

      - kubectl


    state:

      present



- name:

    hold kubernetes packages


  dpkg_selections:


    name:

      "{{ item }}"


    selection:

      hold


  loop:


    - kubelet

    - kubeadm

    - kubectl



- name:

    enable kubelet


  systemd:


    name:

      kubelet


    enabled:

      yes

15.10.6 主任务入口

文件:

复制代码
roles/kubernetes/tasks/main.yml

---

- import_tasks:

    repo.yml



- import_tasks:

    containerd.yml



- import_tasks:

    install.yml

15.10.7 containerd配置

文件:

复制代码
roles/kubernetes/tasks/containerd.yml

---

- name:

    install containerd


  apt:


    name:

      containerd


    state:

      present



- name:

    create containerd config


  shell:


    cmd:

      |
      containerd config default >
      /etc/containerd/config.toml



- name:

    enable systemd cgroup


  replace:


    path:

      /etc/containerd/config.toml


    regexp:

      'SystemdCgroup = false'


    replace:

      'SystemdCgroup = true'



- name:

    restart containerd


  systemd:


    name:

      containerd


    state:

      restarted


    enabled:

      yes

15.10.8 系统参数优化

新增:

复制代码
roles/kubernetes/tasks/sysctl.yml

---

- name:

    load kernel modules


  modprobe:


    name:

      "{{ item }}"


    state:

      present


  loop:


    - overlay

    - br_netfilter



- name:

    kubernetes sysctl


  copy:


    dest:

      /etc/sysctl.d/kubernetes.conf


    content:


      |

      net.bridge.bridge-nf-call-ip6tables=1

      net.bridge.bridge-nf-call-iptables=1

      net.ipv4.ip_forward=1



- name:

    reload sysctl


  command:


    sysctl --system

然后main加入:

复制代码
- import_tasks:

    sysctl.yml

15.10.9 Master初始化

文件:

复制代码
roles/kubernetes/tasks/master.yml

---

- name:

    check cluster


  stat:


    path:

      /etc/kubernetes/admin.conf


  register:

    kube_exist



- name:

    kubeadm init


  command:


    kubeadm init

    --control-plane-endpoint={{ kubernetes_control_plane_endpoint }}

    --pod-network-cidr={{ pod_network_cidr }}

    --service-cidr={{ service_cidr }}


  when:

    not kube_exist.stat.exists



- name:

    create kube config


  shell:


    |

    mkdir -p ~/.kube

    cp /etc/kubernetes/admin.conf ~/.kube/config


  when:

    not kube_exist.stat.exists

15.10.10 Worker Join

文件:

复制代码
roles/kubernetes/tasks/worker.yml

---

- name:

    check node


  shell:


    kubectl get node {{ inventory_hostname }}


  environment:


    KUBECONFIG:

      /etc/kubernetes/admin.conf


  ignore_errors:

    yes



- name:

    generate join command


  command:


    kubeadm token create

    --print-join-command


  delegate_to:


    "{{ groups['kubernetes_master'][0] }}"


  register:


    join_command



- name:

    join cluster


  command:


    "{{ join_command.stdout }}"


  when:


    join_command.stdout is defined

15.10.11 Calico CNI安装

文件:

复制代码
roles/kubernetes/tasks/addons.yml

---

- name:

    install calico


  command:


    kubectl apply -f

    https://raw.githubusercontent.com/projectcalico/calico/{{ calico_version }}/manifests/calico.yaml


  environment:


    KUBECONFIG:

      /etc/kubernetes/admin.conf



- name:

    install metrics server


  command:


    kubectl apply -f

    https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml


  environment:


    KUBECONFIG:

      /etc/kubernetes/admin.conf

15.10.12 MetalLB安装

继续 addons.yml:

复制代码
- name:

    install metallb


  command:


    kubectl apply -f

    https://raw.githubusercontent.com/metallb/metallb/{{ metallb_version }}/config/manifests/metallb-native.yaml


  environment:


    KUBECONFIG:

      /etc/kubernetes/admin.conf

15.10.13 MetalLB地址池

目录:

复制代码
kubernetes/network/

文件:

复制代码
metallb-pool.yaml

apiVersion:

metallb.io/v1beta1


kind:

IPAddressPool


metadata:


 name:

 production


 namespace:

 metallb-system



spec:


 addresses:


 - 10.50.10.200-10.50.10.220

部署:

复制代码
kubectl apply -f metallb-pool.yaml

15.10.14 Kubernetes验证脚本

文件:

复制代码
scripts/check-k8s.sh

#!/bin/bash


echo "Nodes"

kubectl get nodes


echo "Pods"

kubectl get pods -A


echo "Cluster"

kubectl cluster-info

执行:

复制代码
bash scripts/check-k8s.sh

15.10.15 部署执行

安装基础:

复制代码
ansible-playbook playbooks/bootstrap.yml

安装Kubernetes:

复制代码
ansible-playbook playbooks/kubernetes.yml

部署完成验证

节点

复制代码
kubectl get nodes

示例:

复制代码
NAME             STATUS

master01         Ready

master02         Ready

master03         Ready

worker01         Ready

worker02         Ready

Pod

复制代码
kubectl get pods -A

应该包含:

复制代码
kube-system

calico-system

metallb-system

metrics-server

Part 15.10 完成

已生成:

✅ Kubernetes Role目录

✅ kubeadm安装

✅ containerd配置

✅ kernel优化

✅ Master初始化

✅ Worker Join

✅ Calico CNI

✅ MetalLB

✅ Metrics Server

✅ HA Endpoint设计

✅ Inventory关联

✅ 自动部署Playbook

相关推荐
あ-2 小时前
企业 DevOps + 协同办公 + 可观测性 + 网络基础设施平台-Part 15.15 Backup & Disaster Recovery Role
devops
troy1282 小时前
Python 进阶提升(十二):自动化测试与 DevOps 实战
python·devops
あ-3 小时前
企业 DevOps + 协同办公 + 可观测性 + 网络基础设施平台-Part 15.18 Storage & Data Platform Role
devops
A心有千千结4 小时前
Nginx网关可观测建设:打通流量入口,加速线上故障诊断
nginx·prometheus·devops
Lyy4 小时前
DevOps平台 — 第十一篇:工作项的设计与实现
后端·devops
极小狐5 小时前
极狐GitLab 关键补丁版本:19.3.2、19.2.6、19.1.8
ci/cd·devops·极狐gitlab·安全修复·补丁版本
あ-6 小时前
企业 DevOps + 协同办公 + 可观测性 + 网络基础设施平台-Part 15.16 Security Role
devops
あ-6 小时前
企业 DevOps + 协同办公 + 可观测性 + 网络基础设施平台-Part 15.17 Network & HA Role
devops
Jeromefromhk2 天前
我把所有服务搬上 Kubernetes,又全部搬了回来
kubernetes·devops