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 集群。
以部署3master 1node高可用kubernetes集群为例,后续node节点可以添加。
主机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 |
安装必要的软件包
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 # 查看时钟同步状态
关闭防火墙(原因: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分区
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
hostnamectl set-hostname master1
hostnamectl set-hostname master2
hostnamectl set-hostname master3
hostnamectl set-hostname worker1
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
配置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的主机。
部署操作在master1上操作即可
rke支持的k8s版本:
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.yml
和cluster.rkestate
两个文件的名称取决于您如何命名 RKE 集群配置文件,如果您修改的集群配置文件的名称,那么后两个文件的名称可能会跟上面列出来的文件名称不一样。