一键部署k8s脚本

前情提示

本次安装使用的github上的开源项目kubeadm-ha,基于kubeadm+ansible-playbook实现,当前支持k8s版本: 1.20.4
git地址 https://github.com/TimeBye/kubeadm-ha

环境准备

官网的安装说明也很简单但是还有些细节还是没有提到 所以我自己照着官网的教程 补充了一些细节

硬件系统要求

  • Master节点:2c2g+
  • Worker节点:2c4g+

使用centos7.7安装请按上面配置准备好3台centos,1台作为Master节点,2台Worker节点

这是我的各个节点的配置

主机名ip配置角色
node110.168.1.114c16getcd,master,worker
node210.168.1.124c16getcd,lb,master,worker
node310.168.1.134c16getcd,lb,master,worker
node410.168.1.144c16gworker
角色说明:

master: k8s管理节点

worker:k8s工作节点

etcd:k8s数据存储etcd部署节点

lb: 负载均衡节点,基于负载均衡器 + keepalived实现,可实现一台lb主节点挂掉后,ip自动漂移到其他节点

其余准备工作

除以上四台主机使用的ip外,另外准备一个ip,供vip漂移使用,本人使用的ip是:10.168.1.15


centos准备

在安装之前需要准备一些基础的软件环境用于下载一键安装k8s的脚本和编辑配置

centos网络准备

安装时需要连接互联网下载各种软件 所以需要保证每个节点都可以访问外网

ping baidu.com

建议关闭centos的防火墙

systemctl stop firewalld  && systemctl disable firewalld && systemctl status firewalld 

同时需要保证各个节点间可以相互ping通

ping 其他节点ip
centos软件准备

用ssh连接到Master节点上安装git

yum install git -y

部署k8s前配置

下载部署脚本

在Master节点clone安装脚本 脚本地址

git clone --depth 1 https://github.com/TimeBye/kubeadm-ha

进入到下载的部署脚本的目录

cd kubeadm-ha
安装 Ansible 运行环境

在master节点安装Ansible环境

sudo ./install-ansible.sh
修改安装的配置文件

由于我部署的集群是三个master节点,所以我们需要修改example/hosts.m-master.hostname.ini 文件

vi example/hosts.m-master.hostname.ini

修改的内容如下:

; 将所有节点的信息在这里填写
;    第一个字段                  为 kubernetes 节点 nodeName,注意必须由小写字母、数字,“-”或“.”组成,并且必须以小写字母或数字开头和结尾
;    第二个字段 ansible_host     为节点内网IP
;    第三个字段 ansible_port     为节点 sshd 监听端口
;    第四个字段 ansible_user     为节点远程登录用户名
;    第五个字段 ansible_ssh_pass 为节点远程登录用户密码
[all]
node1 ansible_host=10.168.1.11 ansible_port=22 ansible_user="root" ansible_ssh_pass="111111"
node2 ansible_host=10.168.1.12 ansible_port=22 ansible_user="root" ansible_ssh_pass="111111"
node3 ansible_host=10.168.1.13 ansible_port=22 ansible_user="root" ansible_ssh_pass="111111"
node4 ansible_host=10.168.1.14 ansible_port=22 ansible_user="root" ansible_ssh_pass="111111"
; lb节点,这里使用node2和node3
[lb]
node2
node3
; 注意etcd集群必须是1,3,5,7...奇数个节点
[etcd]
node1
node2
node3
; 集群master节点
[kube-master]
node1
node2
node3
; 集群worker节点,一个节点可有多个角色
[kube-worker]
node1
node2
node3
node4

; 负载均衡后的apiserver ip和端口,部署后可以看到kubeconfig文件中server地址为:https://10.168.1.15:8443
; 使用负载均衡后集群 apiserver ip,设置 lb_kube_apiserver_ip 变量,则启用负载均衡器 + keepalived
lb_kube_apiserver_ip="10.168.1.15"
; 使用负载均衡后集群 apiserver port
lb_kube_apiserver_port="8443"

hosts.m-master.hostname.ini完整内容如下

; 将所有节点信息在这里填写
;    第一个字段                  为远程服务器内网IP
;    第二个字段 ansible_port     为节点 sshd 监听端口
;    第三个字段 ansible_user     为节点远程登录用户名
;    第四个字段 ansible_ssh_pass 为节点远程登录用户密码
[all]
192.168.28.80 ansible_port=22 ansible_user="root" ansible_ssh_pass="cheng"
192.168.28.128 ansible_port=22 ansible_user="root" ansible_ssh_pass="cheng"
192.168.28.89 ansible_port=22 ansible_user="root" ansible_ssh_pass="cheng"

; 单 master 节点不需要进行负载均衡,lb节点组留空。
[lb]

; 注意etcd集群必须是1,3,5,7...奇数个节点
[etcd]
192.168.28.80
192.168.28.128
192.168.28.89

[kube-master]
192.168.28.80

[kube-worker]
192.168.28.80
192.168.28.128
192.168.28.89

; 预留组,后续添加master节点使用
[new-master]

; 预留组,后续添加worker节点使用
[new-worker]

; 预留组,后续添加etcd节点使用
[new-etcd]

; 预留组,后续删除worker角色使用
[del-worker]

; 预留组,后续删除master角色使用
[del-master]

; 预留组,后续删除etcd角色使用
[del-etcd]

; 预留组,后续删除节点使用
[del-node]

;-------------------------------------- 以下为基础信息配置 ------------------------------------;
[all:vars]
; 是否跳过节点物理资源校验,Master节点要求2c2g以上,Worker节点要求2c4g以上
skip_verify_node=false
; kubernetes版本
kube_version="1.20.4"
; 负载均衡器
;   有 nginx、openresty、haproxy、envoy  和 slb 可选,默认使用 nginx
;   为什么单 master 集群 apiserver 也使用了负载均衡请参与此讨论: https://github.com/TimeBye/kubeadm-ha/issues/8
lb_mode="nginx"
; 使用负载均衡后集群 apiserver ip,设置 lb_kube_apiserver_ip 变量,则启用负载均衡器 + keepalived
; lb_kube_apiserver_ip="192.168.56.15"
; 使用负载均衡后集群 apiserver port
lb_kube_apiserver_port="8443"

; 网段选择:pod 和 service 的网段不能与服务器网段重叠,
; 若有重叠请配置 `kube_pod_subnet` 和 `kube_service_subnet` 变量设置 pod 和 service 的网段,示例参考:
;    如果服务器网段为:10.0.0.1/8
;       pod 网段可设置为:192.168.0.0/18
;       service 网段可设置为 192.168.64.0/18
;    如果服务器网段为:172.16.0.1/12
;       pod 网段可设置为:10.244.0.0/18
;       service 网段可设置为 10.244.64.0/18
;    如果服务器网段为:192.168.0.1/16
;       pod 网段可设置为:10.244.0.0/18
;       service 网段可设置为 10.244.64.0/18
; 集群pod ip段,默认掩码位 18 即 16384 个ip
kube_pod_subnet="10.244.0.0/18"
; 集群service ip段
kube_service_subnet="10.244.64.0/18"
; 分配给节点的 pod 子网掩码位,默认为 24 即 256 个ip,故使用这些默认值可以纳管 16384/256=64 个节点。
kube_network_node_prefix="24"

; node节点最大 pod 数。数量与分配给节点的 pod 子网有关,ip 数应大于 pod 数。
; https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr
kube_max_pods="110"

; 集群网络插件,目前支持flannel,calico
network_plugin="calico"

; 若服务器磁盘分为系统盘与数据盘,请修改以下路径至数据盘自定义的目录。
; Kubelet 根目录
kubelet_root_dir="/var/lib/kubelet"
; docker容器存储目录
docker_storage_dir="/var/lib/docker"
; containerd容器存储目录
containerd_storage_dir="/var/lib/containerd"
; Etcd 数据根目录
etcd_data_dir="/var/lib/etcd"
修改variables.yaml文件
该文件说明:

高级配置,注意: 如果安装集群时使用高级配置则以后所有操作都需将 -e @example/variables.yaml 参数添加在 ansible-playbook 命令中

  1. 本项目所有可配置项都在 example/variables.yaml 文件中体现,需自定义配置时删除配置项前注释符即可。
  2. example/hosts.m-master.ip.ini 文件中与 example/variables.yaml 变量值冲突时, example/variables.yaml 文件中的变量值优先级最高。
修改内容:
# 容器运行时类型,可选项:containerd,docker;默认 containerd
container_manager: containerd
# containerd镜像加速
containerd_plugins_cri_registries_mirrors:
  "docker.io": "https://lj88h5zm.mirror.aliyuncs.com"
# 选择容器运行时为docker时,配置docker国内镜像加速(若不需要加速,请将值删去,键保留)
docker_mirror:
  - "https://lj88h5zm.mirror.aliyuncs.com"

# lb已在hosts.m-master.hostname.ini中配置,可以注释掉
# lb_mode: nginx
# 使用负载均衡后集群 apiserver ip
# lb_kube_apiserver_ip: "10.168.1.15"
# lb_kube_apiserver_port: 8443
# 是否启用kubernetes-dashboard,默认为false,本人使用其他监控软件,所以修改为false
kubernetesui_dashboard_enabled: false
# 是否启用cert-manager,默认为false,cert-manager用于管理k8s集群中的证书,安装rancher时需要,修改为true
cert_manager_enabled: true
完整内容如下:
# ------------------------ #
# 基础信息配置
# ------------------------ #
# 是否跳过节点物理资源校验
skip_verify_node: false

# 代理设置,若节点不能直接访问公网,可使用下面变量设置代理。
http_proxy:
https_proxy:
no_proxy: 192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,127.0.0.1,localhost

# 是否禁用防护墙
# 注意:本脚本不管理防火墙,您需要按照 "00-安装须知" 中所提及的 "端口占用" 手动进行放行相应端口。
# 为了避免在部署过程中出现问题,您应该禁用防火墙。
firewalld_disabled: true

# 节点时区
timezone: Asia/Shanghai

# 是否启用 chrony 进行时间同步
chrony_enabled: false
ntp_server: "ntp.aliyun.com"
chrony_image: "{{ kube_image_repository }}/setzero_chrony:3.5"

# CentOS yum源仓库
# 基础软件源
base_yum_repo: http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
# epel软件源( CeontOS8默认使用:https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch )
epel_yum_repo: http://mirrors.aliyun.com/epel/$releasever/$basearch
# docker-ce源 (CentOS可使用:https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable )
docker_yum_repo: https://mirrors.aliyun.com/docker-ce/linux/centos/{{ ansible_distribution_major_version }}/$basearch/stable
# kubernetes源
kubernetes_yum_repo: https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-{{ ansible_architecture }}/

# Debian apt源仓库
# 基础软件源
base_apt_repo: deb http://mirrors.aliyun.com/{{ host_distribution | lower }}/ {{ host_distribution_release }} main restricted universe multiverse
# docker-ce源
docker_apt_repo: "deb [arch={{ host_architecture }}] https://mirrors.aliyun.com/docker-ce/linux/{{ host_distribution | lower }} {{ host_distribution_release }} stable"
# kubernetes源
kubernetes_apt_repo: deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main

# 自定义hosts记录
# 举例:
# custom_hosts:
#   "127.0.0.1":
#   - "one.domain.custom.local"
#   - "tow.domain.custom.local"
custom_hosts: { }

# ------------------------ #
# 容器运行时相关参数配置
# ------------------------ #
# 容器运行时类型,可选项:containerd,docker;默认 containerd
container_manager: containerd
# Docker版本
docker_version: 20.10.5
# containerd版本
containerd_version: 1.4.4-1
# containerd 是否使用 systemd 作为 cgroup 驱动程序
containerd_use_systemd_cgroup: true
# containerd 相关配置
containerd_storage_dir: "/var/lib/containerd"
containerd_state_dir: "/run/containerd"
containerd_oom_score: -999
containerd_debug_level: ""
containerd_config_grpc:
  max_recv_message_size: 16777216
  max_send_message_size: 16777216
containerdmax_container_log_line_size: -1
containerd_plugins_cri_registries_mirrors:
  "docker.io": "https://lj88h5zm.mirror.aliyuncs.com"

# Example for containerd_plugins_cri_containerd:
# containerd_plugins_cri_containerd:
#   snapshotter: native
containerd_plugins_cri_containerd: { }

containerd_default_runtime:
  type: io.containerd.runtime.v1.linux
  engine: ''
  root: ''

containerd_untrusted_workload_runtime:
  type: ''
  engine: ''
  root: ''

# Additional runtimes for containerd configuration
#
# Example for Kata Containers:
# containerd_runtimes:
#   - name: kata
#     type: io.containerd.kata.v2
#     engine: ""
#     root: ""
containerd_runtimes: [ ]

# 国内镜像加速(若不需要加速,请将值删去,键保留)
docker_mirror:
  - "https://reg-mirror.qiniu.com"
  - "https://hub-mirror.c.163.com"
  - "https://docker.mirrors.ustc.edu.cn"

# 信任的不安全镜像库地址,默认为 Pod 和 Service 网段
docker_insecure_registries:
  - "{{ kube_pod_subnet }}"
  - "{{ kube_service_subnet }}"

# docker日志相关
docker_log_driver: "json-file"
docker_log_level: "warn"
docker_log_max_size: "10m"
docker_log_max_file: 3

# docker容器存储目录
docker_storage_dir: "/var/lib/docker"

# 并行镜像下载数量
docker_max_concurrent_downloads: 10

# ------------------------ #
# load-balancer 相关参数配置
# ------------------------ #
# 私有云:
#    VIP 负载模式:
#       也就是负载均衡器 + keepalived 模式,比如常用的 haproxy + keepalived。
#       本脚本中负载均衡器有 nginx、openresty、haproxy、envoy 可供选择,设置 lb_mode 即可进行任意切换。
#       设置 lb_kube_apiserver_ip 即表示启用 keepalived,请先与服务器提供部门协商保留一个IP作为 lb_kube_apiserver_ip,
#       一般 lb 节点组中有两个节点就够了,lb节点组中第一个节点为 keepalived 的 master 节点,剩下的都为 backed 节点。
#
#    节点本地负载模式:
#       只启动负载均衡器,不启用 keepalived(即不设置 lb_kube_apiserver_ip),
#       此时 kubelet 链接 apiserver 地址为 127.0.0.1:lb_kube_apiserver_port。
#       使用此模式时请将 lb 节点组置空。
#
# 公有云:
#    不推荐使用 slb 模式,建议直接使用节点本地负载模式。
#    若使用 slb 模式,请先使用节点本地负载模式进行部署,
#    部署成功后再切换至 slb 模式:
#       将 lb_mode 修改为 slb,将 lb_kube_apiserver_ip 设置为购买到的 slb 内网ip,
#       修改 lb_kube_apiserver_port 为 slb 监听端口。
#    再次运行初始化集群脚本即可切换至 slb 模式。
lb_mode: nginx

# 使用负载均衡后集群 apiserver ip
lb_kube_apiserver_ip: "10.168.1.15"

# 使用负载均衡后集群 apiserver port
lb_kube_apiserver_port: 8443

# 负载均衡器健康检查端口
lb_kube_apiserver_healthcheck_port: 8081

# 启用 ingress NodePort服务的负载均衡 (true/false)
enabel_ingress_nodeport_lb: false
# 启用 ingress tls NodePort服务的负载均衡 (true/false)
enabel_ingress_tls_nodeport_lb: false

# kubernetes各组件镜像仓库前缀
kube_image_repository: registry.aliyuncs.com/kubeadm-ha

# 使用openresty进行apiserver负载时使用的openresty镜像
lb_openresty_image: "{{ kube_image_repository }}/openresty_openresty:1.19.3.1-alpine"

# 使用nginx进行apiserver负载时使用的nginx镜像
lb_nginx_image: "{{ kube_image_repository }}/nginx:1.19-alpine"

# 使用haproxy进行apiserver负载时使用的haproxy镜像
lb_haproxy_image: "{{ kube_image_repository }}/haproxy:2.3-alpine"
# haproxy监控绑定端口
lb_haproxy_stats_bind_address: 9090
# haproxy监控访问路径
lb_haproxy_stats_uri: "/stats"
# haproxy监控自动刷新时间(秒)
lb_haproxy_stats_refresh: 10
# haproxy监控用户名
lb_haproxy_stats_user: "admin"
# haproxy监控用户密码
lb_haproxy_stats_password: "admin"
# haproxy负载均衡算法,常见如下:
# "roundrobin": 基于服务器权重的轮询
# "leastconn": 基于服务器最小连接数
# "source": 基于请求源IP地址
# "uri": 基于请求的URI
lb_haproxy_balance_alg: "leastconn"

# 使用haproxy进行apiserver负载时使用的haproxy镜像
lb_envoy_image: "{{ kube_image_repository }}/envoyproxy_envoy:v1.16.2"
lb_envoy_admin_address_port: 9090

# 使用 vip 负载时使用的 keepalived 镜像
lb_keepalived_image: "{{ kube_image_repository }}/osixia_keepalived:2.0.20"
# keepalived auth_type 的 password
lb_keepalived_password: "d0cker"
# 区分多个 instance 的 VRRP 组播,同网段不能重复,取值在0-255之间
lb_keepalived_router_id: 51

# ------------------------ #
# Etcd 相关参数配置
# ------------------------ #

# Etcd证书过期时间(天)
etcd_certs_expired: 3650
# Etcd根证书过期时间(天)
etcd_ca_certs_expired: 36500
# Etcd使用的镜像
etcd_image: "{{ kube_image_repository }}/etcd:3.4.13-0"
# Etcd 数据根目录
etcd_data_dir: "/var/lib/etcd"
# Etcd 每日备份时间,默认3,即凌晨3点,取值范围0-23
etcd_backup_hour: "3"
# Etcd 每日备份文件保留时长,默认7天
etcd_backup_expiry: "7"

# ------------------------ #
# kubernetes 相关参数配置
# ------------------------ #

# kubernetes证书过期时间(天)
kube_certs_expired: 3650
# kubernetes根证书过期时间(天)
kube_ca_certs_expired: 36500

# 加入集群token
kubeadm_token: "abcdef.0123456789abcdef"

# k8s 集群 master 节点证书配置,可以添加多个ip和域名(比如增加公网ip和域名)
kube_master_external_ip:
  - "8.8.8.8"
kube_master_external_domain:
  - "kubernetes.io"

# Pod根容器
pod_infra_container_image: "{{ kube_image_repository }}/pause:3.2"

# kubernetes版本
kube_version: 1.20.4

# 集群内部dns域名
kube_dns_domain: cluster.local

# 网段选择:pod 和 service 的网段不能与服务器网段重叠,
# 若有重叠请配置 `kube_pod_subnet` 和 `kube_service_subnet` 变量设置 pod 和 service 的网段,示例参考:
#    如果服务器网段为:10.0.0.1/8
#       pod 网段可设置为:192.168.0.0/18
#       service 网段可设置为 192.168.64.0/18
#    如果服务器网段为:172.16.0.1/12
#       pod 网段可设置为:10.244.0.0/18
#       service 网段可设置为 10.244.64.0/18
#    如果服务器网段为:192.168.0.1/16
#       pod 网段可设置为:10.244.0.0/18
#       service 网段可设置为 10.244.64.0/18
# 集群pod ip段,默认掩码位 18 即 16384 个ip
kube_pod_subnet: 10.244.0.0/18
# 集群service ip段
kube_service_subnet: 10.244.64.0/18
# 分配给节点的 pod 子网掩码位,默认为 24 即 256 个ip,故使用这些默认值可以纳管 16384/256=64 个节点。
kube_network_node_prefix: 24

# node节点最大 pod 数。数量与分配给节点的 pod 子网有关,ip 数应大于 pod 数。
# https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr
kube_max_pods: 110

# NodePort端口范围
kube_service_node_port_range: 30000-32767

# 资源保留相关配置
eviction_hard_imagefs_available: 15%
eviction_hard_memory_available: 100Mi
eviction_hard_nodefs_available: 10%
eviction_hard_nodefs_inodes_free: 5%

# kubernetes组件预留资源
kube_cpu_reserved: 100m
kube_memory_reserved: 256M
kube_ephemeral_storage_reserved: 1G

# 操作系统守护进程预留资源
system_reserved_enabled: true
# 取消注释以覆盖默认值
system_cpu_reserved: 500m
system_memory_reserved: 512M
system_ephemeral_storage_reserved: 10G

# 默认使用kube-proxy的 'iptables' 模式,可选 'ipvs' 模式
kube_proxy_mode: iptables

# Kubelet 根目录
kubelet_root_dir: "/var/lib/kubelet"

## 存入 Etcd 时的 Secret 进行静态加密
# 仅支持: aescbc, secretbox 或 aesgcm
kube_encryption_algorithm: "aescbc"
# 将Secret数据加密存储到etcd中的配置文件,下面加密码由 head -c 32 /dev/urandom | base64 生成
kube_encrypt_token: "GPG4RC0Vyk7+Mz/niQPttxLIeL4HF96oRCcBRyKNpfM="

## 审计相关配置
# 是否启用审计
kubernetes_audit: false
# 保留审计日志最大天数
audit_log_maxage: 30
# 保留审计日志最大个数
audit_log_maxbackups: 10
# 保留审计日志最大容量(MB)
audit_log_maxsize: 100
# 审计日志文件挂载在主机上的目录
audit_log_hostpath: /var/log/kubernetes/audit
# 审计策略配置文件路径
audit_policy_file: /etc/kubernetes/config/apiserver-audit-policy.yaml
# 自定义审计日志规则 (替换默认的审计规则)
audit_policy_custom_rules: |
  - level: None
    users: []
    verbs: []
    resources: []

# 1.10+ admission plugins
kube_apiserver_enable_admission_plugins:
  - NodeRestriction
# - AlwaysPullImages
# - PodSecurityPolicy

# 1.10+ list of disabled admission plugins
kube_apiserver_disable_admission_plugins: [ ]

# kube-controller-manager 标记 kubelet(node) 为不健康的周期
kube_controller_node_monitor_grace_period: 40s
# kube-controller-manager 定期检查 kubelet(node) 状态周期
kube_controller_node_monitor_period: 5s
# kube-controller-manager 判定节点故障,重建 Pod 的超时时间,默认值 5m0s,这里改为了 2m0s
kube_controller_pod_eviction_timeout: 2m0s
# exit 状态的 pod 超过多少会触发 gc,默认值 12500,这里改为了 10
kube_controller_terminated_pod_gc_threshold: 10

## Extra args for k8s components passing by kubeadm
## example:
kube_kubeadm_apiserver_extra_args:
  runtime-config: api/all=true
kube_kubeadm_controller_extra_args: { }
kube_kubeadm_scheduler_extra_args: { }

## Extra control plane host volume mounts
## Example:
apiserver_extra_volumes:
  - name: name
    hostPath: /host/path
    mountPath: /mount/path
    readOnly: true
controller_manager_extra_volumes: { }
scheduler_extra_volumes: { }

# ------------------------ #
# 集群插件相关参数配置
# ------------------------ #

# 是否等待插件运行成功
wait_plugins_ready: true

# ------------------------ #
# 集群网络插件相关参数配置
# ------------------------ #

# 是否启用网络组建
network_plugins_enabled: true

# 集群网络插件,目前支持flannel, calico
network_plugin: "calico"

# 设置calico 网络 backend: brid, vxlan, none
calico_backend: bird
# calico mtu
calico_veth_mtu: 0
# calico 相关镜像
calico_typha_image: "{{ kube_image_repository }}/calico_typha:v3.17.1"
calico_cni_image: "{{ kube_image_repository }}/calico_cni:v3.17.1"
calico_node_image: "{{ kube_image_repository }}/calico_node:v3.17.1"
calico_kube_controllers_image: "{{ kube_image_repository }}/calico_kube-controllers:v3.17.1"
calico_pod2daemon_flexvol_image: "{{ kube_image_repository }}/calico_pod2daemon-flexvol:v3.17.1"
# 设置 Felix 日志级别(debug, info, warning, error)
calico_felix_log_level: "warning"
# calicoctl image 地址
calicoctl_image: "{{ kube_image_repository }}/calico_ctl:v3.17.1"

# 设置 flannel 后端
# flannel_backend: "host-gw"
flannel_backend: "vxlan"
# flannel 镜像地址
flannel_image: "{{ kube_image_repository }}/coreos_flannel:v0.13.0"

# ------------------------ #
# ingress-controller 相关参数配置
# ------------------------ #

# 是否启用ingress-controller
ingress_controller_enabled: true

# ingress-controller类型(nginx,traefik)
ingress_controller_tpye: nginx

# nginx-ingress-controller 镜像地址
nginx_ingress_image: "{{ kube_image_repository }}/ingress-nginx_controller:v0.43.0"
nginx_ingress_webhook_certgen_image: "{{ kube_image_repository }}/jettech_kube-webhook-certgen:v1.5.0"

# traefik默认证书过期时间(天)
traefik_certs_expired: 3650
# traefik-ingress-controller 镜像地址
traefik_ingress_image: "{{ kube_image_repository }}/traefik:2.4.0"

# ------------------------ #
# kubernetes-dashboard 相关参数配置
# ------------------------ #

# 是否启用kubernetes-dashboard
kubernetesui_dashboard_enabled: false

# kubernetes-dashboard默认证书有效期
kubernetesui_dashboard_certs_expired: 3650

# kubernetes-dashboard 镜像地址
kubernetesui_dashboard_image: "{{ kube_image_repository }}/kubernetesui_dashboard:v2.1.0"
kubernetesui_metrics_scraper_image: "{{ kube_image_repository }}/kubernetesui_metrics-scraper:v1.0.6"

# ------------------------ #
# metrics-server 相关参数配置
# ------------------------ #

# 是否启用metrics-server
metrics_server_enabled: true

# metrics-server image地址
metrics_server_image: "{{ kube_image_repository }}/metrics-server_metrics-server:v0.4.1"

# ------------------------ #
# cert-manager 相关配置
# ------------------------ #

# 是否启用cert-manager
cert_manager_enabled: true

# acme相关配置
acme_email: yourname@gmail.com
acme_server: https://acme-v02.api.letsencrypt.org/directory

# cert-manager 相关 image 地址
cert_manager_cainjector_image: "{{ kube_image_repository }}/jetstack_cert-manager-cainjector:v1.1.0"
cert_manager_webhook_image: "{{ kube_image_repository }}/jetstack_cert-manager-webhook:v1.1.0"
cert_manager_controller_image: "{{ kube_image_repository }}/jetstack_cert-manager-controller:v1.1.0"


升级内核

修改完配置文件后建议升级内核

ansible-playbook -i example/hosts.m-master.hostname.ini -e @example/variables.yaml 00-kernel.yml

内核升级完毕后所有节点 上执行重启命令

reboot

开始部署k8s

等待所有的节点重启完成后进入脚本目录

cd kubeadm-ha

执行一键部署命令

ansible-playbook -i example/hosts.m-master.hostname.ini -e @example/variables.yaml 90-init-cluster.yml

查看节点运行情况

kubectl get nodes

等待所有节点ready 即为创建成功

NAME    STATUS   ROLES                   AGE     VERSION
node1   Ready    etcd,master,worker      3m4s   v1.20.4
node2   Ready    etcd,lb,master,worker   3m9s   v1.20.4
node3   Ready    etcd,lb,master,worker   3m6s   v1.20.4
node4   Ready    worker                  3m1s   v1.20.4

rancher部署(可选)

helm安装

使用helm部署rancher会方便很多,所以需要安装helm

curl -O http://rancher-mirror.cnrancher.com/helm/v3.2.4/helm-v3.2.4-linux-amd64.tar.gz
tar -zxvf helm-v3.2.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin
验证
helm version

输入以下内容说明helm安装成功

version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"clean", GoVersion:"go1.13.12"}

添加rancher chart仓库

helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/stable
helm repo update

安装rancher

helm install rancher rancher-stable/rancher \
 --create-namespace	\
 --namespace cattle-system \
 --set hostname=rancher.local.com
等待 Rancher 运行:
kubectl -n cattle-system rollout status deploy/rancher

输出信息:

Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐