rke部署k8s_v1.20.15高可用

Rancher Kubernetes Engine,简称 RKE,是一个经过 CNCF 认证的 Kubernetes 安装程序。RKE 支持多种操作系统,包括 MacOS、Linux 和 Windows,可以在裸金属服务器(BMS)和虚拟服务器(Virtualized Server)上运行。

市面上的其他 Kubernetes 部署工具存在一个共性问题:在使用工具之前需要满足的先决条件比较多,例如,在使用工具前需要完成安装 kubelet、配置网络等一系列的繁琐操作。而 RKE 简化了部署 Kubernetes 集群的过程,只有一个先决条件:只要您使用的 Docker 是 RKE 支持的版本,就可以通过 RKE 安装 Kubernetes,部署和运行 Kubernetes 集群。RKE 既可以单独使用,作为创建 Kubernetes 集群的工具,也可以配合 Rancher2.x 使用,作为 Rancher2.x 的组件,在 Rancher 中部署和运行 Kubernetes 集群。

部署kubernetes集群

以部署3master 1node高可用kubernetes集群为例,后续node节点可以添加。

1.主机配置:

主机ip 主机名 配置 角色
192.168.2.90 master1 4核8G controlplane,etcd,worker
192.168.2.91 master2 4核8G controlplane,etcd,worker
192.168.2.92 master3 4核8G controlplane,etcd,worker
192.168.2.93 worker1 4核8G controlplane,etcd,worker

1.1 所有主机初始化(可脚本化)

安装必要的软件包

yum -y install epel-release
yum -y install lrzsz vim gcc glibc openssl openssl-devel net-tools wget curl
yum -y update  # 更新一下软件包版本和内核版本
yum -y install ntp
systemctl start ntpd  # 启动时钟同步服务
systemctl enable  ntpd # 设置开机启动
ntpq -p # 查看时钟同步状态

1.2 安全设置

关闭防火墙(原因:k8s不关闭会出现各种问题Installing kubeadm | Kubernetes)

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i s@SELINUX=enforcing@SELINUX=disabled@g /etc/selinux/configswapoff -a
swapoff -a#关闭swap分区

1.3 内核调优

cat >> /etc/sysctl.conf <

执行生效

modprobe br_netfilter  # 要先执行这个命令,要不然会报错
sysctl -p

加载ipvs相关模块

cat > /etc/sysconfig/modules/ipvs.modules <

上面脚本创建了/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。 使用

lsmod | grep -e ip_vs -e nf_conntrack_ipv4

命令查看是否已经正确加载所需的内核模块。
接下来还需要确保各个节点上已经安装了ipset软件包。 为了便于查看ipvs的代理规则,最好安装一下管理工具ipvsadm。

yum install ipset ipvsadm -y

1.4hostname修改

hostnamectl set-hostname master1
hostnamectl set-hostname master2
hostnamectl set-hostname master3
hostnamectl set-hostname worker1

1.5 在/etc/hosts文件中添加配置

cat >> /etc/hosts << EOF
192.168.2.90 master1
192.168.2.91 master2
192.168.2.92 master3
192.168.2.93 worker1
EOF

1.6 在每台主机上安装docker

配置docker信任仓库,指定镜像源,修改docker cgroup driver为systemd,根据文档CRI installation中的内容,对于使用systemd作为init system的Linux的发行版,使用systemd作为docker的cgroup driver可以确保服务器节点在资源紧张的情况更加稳定,因此这里修改各个节点上docker的cgroup driver为systemd

mkdir /etc/docker/
cat < /etc/docker/daemon.json
{
  "registry-mirrors": ["https://lishanbin.demo.cn:443"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl restart docker
systemctl status docker # 确认docker是否正常启动
docker info # 确认镜像源配置是否生效

因rke不支持root部署k8s集群,配置普通用户加入docker组把master1主机当做主控机,其它主机的app用户互信它的app用户。

useradd app
usermod -G docker app
mkdir -pv /home/app/.ssh/
chmod 700 /home/app/.ssh/
chown -R app.app /home/app/
chmod 600 /home/app/.ssh/authorized_keys
vim /home/app/.ssh/authorized_keys  # 添加第一个节点的密钥

测试用ssh连接。从nginx主机上,通过ops用户都能正常ssh连接到三台要部署k8s的主机。

2. 使用rke部署k8s集群

部署操作在master1上操作即可

2.1下载rke

rke支持的k8s版本:

rke部署k8s_v1.20.15高可用_第1张图片

su - app
wget https://github.com/rancher/rke/releases/tag/v1.3.7
#检查支持的版本
./rke config --system-images --all |grep hyperkube

2.2编写配置文件(./rke_linux-amd64 config生成也行)

vim cluster.yml

nodes:
  - address: 192.168.2.90
    user: app
    role:
      - controlplane
      - etcd
    ssh_key_path: ~/.ssh/id_rsa
    port: 22
  - address: 192.168.2.91
    user: app
    role:
      - worker
    ssh_key_path: ~/.ssh/id_rsa
    port: 22
    - address: 192.168.2.92
    user: app
    role:
      - worker
    ssh_key_path: ~/.ssh/id_rsa
    port: 22
  - address: 192.168.2.93
    user: app
    role:
      - worker
    ssh_key_path: ~/.ssh/id_rsa
    port: 22    
network:
  plugin: calico

ignore_docker_version: true

private_registries:
  - url: lishanbin.demo.cn:443
    user: admin
    password: xxx
    is_default: true

#kubernetes_version: v1.13.5-rancher1-3

system_images:
  etcd: lishanbin.demo.cn:443/rancher/mirrored-coreos-etcd:v3.4.15-rancher1
  alpine: lishanbin.demo.cn:443/rancher/rke-tools:v0.1.78
  nginx_proxy: lishanbin.demo.cn:443/rancher/rke-tools:v0.1.78
  cert_downloader: lishanbin.demo.cn:443/rancher/rke-tools:v0.1.78
  kubernetes: lishanbin.demo.cn:443/rancher/hyperkube:v1.20.12-rancher1
  kubernetes_services_sidecar: lishanbin.demo.cn:443/rancher/rke-tools:v0.1.78
  pod_infra_container: lishanbin.demo.cn:443/rancher/mirrored-pause:3.2


  # CoreDNS images
  coredns: lishanbin.demo.cn:443/rancher/mirrored-coredns-coredns:1.8.0
  coredns_autoscaler: lishanbin.demo.cn:443/rancher/mirrored-cluster-proportional-autoscaler:1.8.1

  # Calico images
  calico_node: lishanbin.demo.cn:443/rancher/mirrored-calico-node:v3.17.2
  calico_cni: lishanbin.demo.cn:443/rancher/mirrored-calico-cni:v3.17.2
  calico_controllers: lishanbin.demo.cn:443/rancher/mirrored-nginx-ingress-controller-defaultbackend:1.5-rancher1
  calico_ctl: lishanbin.demo.cn:443/rancher/mirrored-calico-ctl:v3.17.2
  calico_flexvol: lishanbin.demo.cn:443/rancher/mirrored-calico-pod2daemon-flexvol:v3.17.2


  # Ingress controller images
  #ingress: lishanbin.demo.cn:443/library/nginx-ingress-controller:0.21.0-rancher3
  #ingress_backend: lishanbin.demo.cn:443/library/nginx-ingress-controller-defaultbackend:1.4-rancher1

  # Metrics server image
  metrics_server: lishanbin.demo.cn:443/rancher/mirrored-metrics-server:v0.4.1

services:
    etcd:
      snapshot: true
      creation: 5m0s
      retention: 24h
    kube-api:
      service_cluster_ip_range: 10.214.0.0/16
      always_pull_images: false
      pod_security_policy: false
      secrets_encryption_config:
        enabled: false
      service_node_port_range: 30000-32767
      extra_args:
        feature-gates: 'RemoveSelfLink=false'

    kubeproxy:
      extra_args:
        proxy-mode: ipvs
        masquerade-all: true
      extra_binds:
        - "/usr/lib/modules:/tmp/modules"
    kube-controller:
      cluster_cidr: 10.213.0.0/16
      service_cluster_ip_range: 10.214.0.0/16
    kubelet:
      cluster_domain: cluster.local
      cluster_dns_server: 10.214.0.10
      fail_swap_on: false
      extra_args:
        max-pods: 250


authentication:
    strategy: "x509"
    sans:
      - "192.168.216.222"
dns:
    provider: coredns
authorization:
    mode: rbac

addon_job_timeout: 30

ingress:
    provider: nginx
    hostnetwork: true


addons: ""
addons_include: []


中间其实有一些是需要修改的,比如etcd的备份周期,备份保留时间,ingress是否安装等等,具体参数参考:
官方示例配置

创建了cluster.yml文件后,您可以运行以下命令部署集群。这条命令默认cluster.yml已经保存在了您运行命令所处的路径下。

rke up

INFO[0000] Building Kubernetes cluster
INFO[0000] [dialer] Setup tunnel for host [10.0.0.1]
INFO[0000] [network] Deploying port listener containers
INFO[0000] [network] Pulling image [alpine:latest] on host [10.0.0.1]
...
INFO[0101] Finished building Kubernetes cluster successfully

运行如上图后k8s集群即部署完成,kubectl get nodes 查看

[app@master1 work]$ kubectl get nodes
NAME                STATUS   ROLES               AGE    VERSION
192.168.2.90      Ready    controlplane,etcd   1d     v1.20.15
192.168.2.91      Ready    controlplane,etcd   1d     v1.20.15
192.168.2.92      Ready    controlplane,etcd   1d     v1.20.15
192.168.2.93      Ready    worker              1d     v1.20.15

请保存下文中列出来的所有文件,这些文件可以用于维护集群,排查问题和升级集群。

cluster.yml:RKE 集群的配置文件。
kube_config_cluster.yml:该集群的Kubeconfig 文件包含了获取该集群所有权限的认证凭据。
cluster.rkestate:Kubernetes 集群状态文件,包含了获取该集群所有权限的认证凭据,使用 RKE v0.2.0 时才会创建这个文件。

kube_config_cluster.ymlcluster.rkestate两个文件的名称取决于您如何命名 RKE 集群配置文件,如果您修改的集群配置文件的名称,那么后两个文件的名称可能会跟上面列出来的文件名称不一样。

你可能感兴趣的:(kubernetes,nginx,kubernetes,运维)