序
- RKE安装高可用K8S集群
- Helm安装Rancher
- Rancher添加下游集群
- Rancher部署应用
环境准备
角色 | IP | hostname |
---|---|---|
Master | 192.168.6.161 | ubuntu-m1-161 |
Master | 192.168.6.162 | ubuntu-m2-162 |
Master | 192.168.6.163 | ubuntu-m3-163 |
NGINX | 192.168.6.31 | ubuntu-n1-31 |
RKE 安装 K8S
名词解释
安装要求
1. 禁用woker节点swap
K8S中所有woker角色的节点
###永久禁用Swap
# 把根目录文件系统设为可读写
sudo mount -n -o remount,rw /
# 用vi修改/etc/fstab文件,在swap分区这行前加 # 禁用掉,保存退出
vi /etc/fstab
# 重新启动电脑,使用free -m查看分区状态
reboot
sudo free -m
2. 加载内核模块
所有节点
modprobe -a br_netfilter ip6_udp_tunnel ip_set ip_set_hash_ip ip_set_hash_net iptable_filter iptable_nat iptable_mangle iptable_raw nf_conntrack_netlink nf_conntrack nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat nf_nat_ipv4 nf_nat_masquerade_ipv4 nfnetlink udp_tunnel VETH VXLAN x_tables xt_addrtype xt_conntrack xt_comment xt_mark xt_multiport xt_nat xt_recent xt_set xt_statistic xt_tcpudp
会有两个模块找不到,无影响
3. 修改sysctl配置
所有节点
vi /etc/sysctl.conf
## 加入如下
net.bridge.bridge-nf-call-iptables=1
## 重新加载配置
sysctl -p /etc/sysctl.conf
4. 防火墙
所有节点 或开放端口或完全禁用
# 禁用防火墙
ufw disable
5. 配置主机时间、时区、系统语言
所有节点
#修改时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#修改系统语言环境:
sudo echo 'LANG="C.UTF-8"' >> /etc/profile;source /etc/profile
6. (可选)启用 Cgroup
所有节点
vim /etc/default/grub
# /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
...
sudo reboot
7.创建用户
所有节点
# 创建用户
sudo useradd -m -s /bin/bash -G adm rkeuser
# 给用户设置密码
sudo passwd rkeuser
# 将用户添加到docker用户组
# 如果机器上还没有安装docker 执行下面命令则会提示docker用户组不存在,可以先安装docker再执行下面命令。下面章节会介绍docker的安装
usermod -aG docker rkeuser
useradd:
-m 创建家目录
-s 默认shell(默认是/bin/sh,很难用)
-G 加入用户组,adm组默认是可以sudo的
passwd
只有执行过passwd修改过密码才可以通过ssh进行登录,useradd命令中的 -p 参数与这个效果并不相同
8. 修改hostname
所有节点
# 修改主机名
vim /etc/hostname
# 修改hosts IP映射
vim /etc/hosts
# /etc/hosts
127.0.0.1 localhost
192.168.6.161 ubuntu-m1-161
192.168.6.162 ubuntu-m2-162
192.168.6.163 ubuntu-m3-163
192.168.6.31 ubuntu-n1-31
192.168.6.32 ubuntu-n2-32
...
9. SSH互信
切换用户到rkeuser
在第一个节点m1上执行即可
# 切换到rkeuser
su - rkeuser
# 生成公钥-私钥对
ssh-keygen -t rsa -C '123456'
# 将master节点的公钥复制到所有节点(包括自身)-使得新建的rkeuser用户可以免密登录所有节点
ssh-copy-id rkeuser@192.168.6.161
ssh-copy-id rkeuser@192.168.6.162
ssh-copy-id rkeuser@192.168.6.163
ssh-copy-id rkeuser@192.168.6.31
使用ssh命令登陆了其他节点,检查是否可以免密登录。此步骤很重要,SSH互信是搭建集群的基本条件。
ssh user@node
user@node:~> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
user@node:~>
软件要求
OpenSSH
所有节点
为了可以通过 SSH 访问每一个节点,RKE 要求每个节点上安装的是 OpenSSH 的版本是OpenSSH 7.0+。
https://blog.csdn.net/future_ai/article/details/81701744
## 安装zlib库
sudo apt install -y build-essential libssl-dev zlib1g-dev
## 下载7.4安装包
wget "http://mirrors.evowise.com/pub/OpenBSD/OpenSSH/portable/openssh-7.4p1.tar.gz"
## 解压
tar xfz openssh-7.4p1.tar.gz
cd openssh-7.4p1
## 生成Makefile文件
./configure
## 编译
make
## 安装
sudo make install
### 检查版本
sshd -V
OpenSSH_7.4p1, OpenSSL 1.0.1f 6 Jan 2014
OS
所有节点
Ubuntu 16.04.7 LTS (GNU/Linux 4.4.0-186-generic x86_64)
RKE 可以在大多数已安装 Docker 的 Linux 操作系统上运行。RKE 的开发和测试过程是在 Ubuntu 16.04 上完成的。然而,其他操作系统对 RKE 有限制或要求。
修改Ubuntu apt源
# 备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 查看系统版本代号
lsb_release -c
#Ubuntu 12.04 (LTS)代号为precise
#Ubuntu 14.04 (LTS)代号为trusty
#Ubuntu 15.04 代号为vivid
#Ubuntu 15.10 代号为wily
#Ubuntu 16.04 (LTS)代号为xenial
#Ubuntu 18.04 (LTS)代号为bionic
sudo vim /etc/apt/sources.list
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
...
sudo apt-get update
sudo apt-get upgrade
https://blog.csdn.net/zhangjiahao14/article/details/80554616
安装Docker
所有节点
参照“其他必备软件”章节中的docker版本
使用Rancher提供的docker安装脚本
使用docker v20.10.6 脚本安装
sudo mkdir /opt/app
sudo wget https://releases.rancher.com/install-docker/20.10.sh
# 提升sh可执行权限
sudo chmod a+x 20.10.sh
#执行
./20.10.sh
#检查Docker版本号
docker version --format '{{.Server.Version}}'
docker ps -a
docker stop id
# 移除所有停止的docker进程
docker rm $(docker ps -a -q)
修改docker镜像仓库
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://z34wtdhg.mirror.aliyuncs.com"
],
"insecure-registries": [
"harbor.httpshop.com",
"bh-harbor.suixingpay.com"
],
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
sudo systemctl restart docker
其他必备软件版本号
软件 | 版本 | 安装于 | 兼容性 | 是否必须 | 备注 |
---|---|---|---|---|---|
docker | v20.10.6 | 所有节点全部安装 | |||
RKE | v1.2.8 | 在m1节点上安装部署 | |||
K8S | v1.20.6 | 在m1节点上安装部署 | |||
kubectl | v1.19.2 | 在m1节点上安装部署 | |||
Helm | v3.5.4 | 在m1节点上安装部署 | |||
Rancher | v2.5.8 | 在m1节点上安装部署 | Images - rancher/rancher:v2.5.8 - rancher/rancher-agent:v2.5.8 Tools - CLI - v2.4.11 - RKE - v1.2.8 Kubernetes - v1.20.6 (default) - v1.19.10 - v1.18.18 - v1.17.17 | ||
RancherCLI | v2.4.11 | rancher命令行工具 |
国内用户可访问 http://mirror.cnrancher.com/ 下载资源
端口要求
如果您使用的是外部防火墙,请确保在运行 RKE 的节点和创建集群的节点之间开放了 TCP/6443 端口
运行以下命令,使用 iptables 打开 TCP/6443 端口。
# Open TCP/6443 for all
iptables -A INPUT -p tcp --dport 6443 -j ACCEPT
# Open TCP/6443 for one specific IP
iptables -A INPUT -p tcp -s your_ip_here --dport 6443 -j ACCEPT
使用 firewalld 打开 TCP/6443 端口
运行以下命令,使用 firewlld 打开 TCP/6443 端口。
# Open TCP/6443 for all
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --reload
# Open TCP/6443 for one specific IP
firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4"
source address="your_ip_here/32"
port protocol="tcp" port="6443" accept'
firewall-cmd --reload
SSH Server 配置
您的 SSH server 全系统配置文件,位于/etc/ssh/sshd_config
,该文件必须包含以下代码,允许 TCP 转发。
vi /etc/ssh/sshd_config
## 允许TCP转发
AllowTcpForwarding yes
安装RKE
m1节点
RKE 是一个快速的,多功能的 Kubernetes 安装工具,您可以参考以下步骤,使用 RKE 在您的 Linux 主机上安装 Kubernetes。
RKE 提供了三种下载安装包的方法:通过 GitHub、Homebrew 或 MacPorts 都可以下载 RKE 安装包。使用 Github 下载对您使用的主机操作系统没有要求,而使用 Homebrew 和 MacPorts 要求您的主机操作系统必须为 MacOS。
使用 GitHub 下载安装包
根据“其他必备软件版本号”章节获取兼容的RKE版本。下载rke_linux_amd64版本 v1.2.8
cd /opt/app
# 下载RKE二进制安装包
$ wget https://github.com/rancher/rke/releases/download/v1.2.8/rke_linux-amd64
# 提醒可执行权限
$ chmod +x rke_linux-amd64
mv rke_linux-amd64 /usr/local/bin/rke
# 确认RKE版本
$ rke --version
为K8S集群准备节点
创建cluster.yml
文件,cluster.yml
文件详解,参考K8S配置选项
主要根据自己的架构修改配置项,其中kubernetes_version
是指k8s的版本号,需要访问RKE 版本说明 查找兼容的K8S版本。
# 创建空cluster.yml
rke config --empty --name cluster.yml
vim cluster.yml
nodes:
- address: 192.168.6.161
port: "22"
internal_address: 192.168.6.161
role: [controlplane,worker,etcd]
hostname_override: "ubuntu-m1-161"
user: rke
ssh_key_path: /home/rke/.ssh/id_rsa
ssh_agent_auth: true
labels: {}
taints: []
- address: 192.168.6.162
port: "22"
internal_address: 192.168.6.162
role: [controlplane,worker,etcd]
hostname_override: "ubuntu-m2-162"
user: rke
ssh_key_path: /home/rke/.ssh/id_rsa
ssh_agent_auth: true
labels: {}
taints: []
- address: 192.168.6.163
port: "22"
internal_address: 192.168.6.163
role: [controlplane,worker,etcd]
hostname_override: "ubuntu-m3-163"
user: rke
ssh_key_path: /home/rke/.ssh/id_rsa
ssh_agent_auth: true
labels: {}
taints: []
kubernetes_version: "v1.20.6-rancher1-1"
cluster_name: "hello-k8s"
services:
etcd:
backup_config:
enabled: true
interval_hours: 6
retention: 60
备注:
address 公共域名或IP地址
user 可以运行docker命令的用户
role 分配给节点的Kubernetes角色列表
internal_address 内部集群通信的私有域名或IP地址
开启了etcd的备份机制,每隔6小时备份一次,保存60天数据
使用RKE部署K8S集群
切换用户到rkeuser
在第一个节点m1上执行即可
# 开始部署K8S集群
rke up --config ./cluster.yml
#打印结果
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
运行该命令后,返回的最后一行信息应该是Finished building Kubernetes cluster successfully
,表示成功部署集群,可以开始使用集群。在创建 Kubernetes 集群的过程中,会创建一个kubeconfig
文件,它的文件名称是 kube_config_cluster.yml
,您可以使用它控制 Kubernetes 集群。
说明
如果您之前使用的集群配置文件名称不是cluster.yml
,那么这里生成的 kube_config 文件的名称也会随之变化为kube_config*<FILE_NAME>.yml
。
保存文件
重要
请保存下文中列出来的所有文件,这些文件可以用于维护集群,排查问题和升级集群。
请将这些文件复制并保存到安全的位置:
cluster.yml
:RKE 集群的配置文件。kube_config_cluster.yml
:该集群的Kubeconfig 文件包含了获取该集群所有权限的认证凭据。cluster.rkestate
:Kubernetes 集群状态文件,包含了获取该集群所有权限的认证凭据,使用 RKE v0.2.0 时才会创建这个文件。
说明
kube_config_cluster.yml
和cluster.rkestate
两个文件的名称取决于您如何命名 RKE 集群配置文件,如果您修改的集群配置文件的名称,那么后两个文件的名称可能会跟上面列出来的文件名称不一样。
Kubernetes 集群状态文件
Kubernetes 集群状态文件用集群配置文件cluster.yml
以及集群中的组件证书组成。不同版本的 RKE 会将文件保存在不同的地方。
v0.2.0 以及更新版本的 RKE 会在保存集群配置文件 cluster.yml
的路径下创建一个.rkestate
文件。该文件包含当前集群的状态、RKE 配置信息和证书信息。请妥善保存该文件的副本。
v0.2.0 之前的版本的 RKE 会将集群状态存储以密文的形式存储。更新集群状态时,RKE 拉取这些密文,修改集群状态,然后将新的集群状态再次存储为密文。
操作 Kubernetes 集群
成功启动和运行集群后,您可以使用kubectl
和kubeconfig 文件控制集群。
安装Kubectl
切换用户rkeuser
在第一个节点m1上执行即可
提示
国内用户,可以导航到 http://mirror.cnrancher.com 下载所需资源。
cd /opt/app
# 下载最新版本的kubectl
sudo wget http://rancher-mirror.cnrancher.com/kubectl/v1.19.2/linux-amd64-v1.19.2-kubectl
# 配置全局访问
sudo mv linux-amd64-v1.19.2-kubectl /usr/local/bin/kubectl
# 提升权限
sudo chmod +x /usr/local/bin/kubectl
# 查看kubectl版本
sudo kubectl version --client
Helm安装Rancher
安装Helm
在第一个节点m1上执行即可
Rancher 使用 Kubernetes 的 Helm 软件包管理器安装。Helm Charts 为 Kubernetes YAML 清单文档提供了模板语法。
注意
本安装指南假定您使用的是 Helm3。有关从 Helm 2 迁移到 Helm 3 的方法,请参阅官方的Helm 2 到 3 迁移文档。这个指南提供了使用 Helm 2 在 RKE Kubernetes 集群上安装 Rancher 的较旧的安装指南,适用于无法升级到 Helm 3 的情况。
cd /opt/app
# 下载Helm3
sudo wget http://rancher-mirror.cnrancher.com/helm/v3.5.4/helm-v3.5.4-linux-amd64.tar.gz
# 解压
sudo tar zxvf helm-v3.5.4-linux-amd64.tar.gz -C /usr/src/
# 移动位置
sudo mv linux-amd64/helm /usr/local/bin/
#添加可执行权限
sudo chmod +x /usr/local/bin/helm
#检查版本
sudo helm version
添加 Helm Chart 仓库
使用helm repo add
命令添加含有 Rancher Chart 的 Helm Chart 仓库。
请将命令中的<CHART_REPO>
,替换为latest
,stable
或alpha
。更多信息,请查看选择 Rancher 版本来选择最适合您的仓库。
latest
: 建议在尝试新功能时使用。stable
: 建议在生产环境中使用。(推荐)alpha
: 未来版本的实验性预览。
sudo helm repo add rancher-<CHART_REPO> http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/<CHART_REPO>
为 Rancher 创建 Namespace
kubectl create namespace cattle-system
安装 cert-manager
# 安装 CustomResourceDefinition 资源
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0/cert-manager.crds.yaml
# **重要:**
# 如果您正在运行 Kubernetes v1.15 或更低版本,
# 则需要在上方的 kubectl apply 命令中添加`--validate=false`标志,
# 否则您将在 cert-manager 的 CustomResourceDefinition 资源中收到与
# x-kubernetes-preserve-unknown-fields 字段有关的验证错误。
# 这是一个良性错误,是由于 kubectl 执行资源验证的方式造成的。
# 为 cert-manager 创建命名空间
kubectl create namespace cert-manager
# 添加 Jetstack Helm 仓库
helm repo add jetstack https://charts.jetstack.io
# 更新本地 Helm chart 仓库缓存
helm repo update
# 安装 cert-manager Helm chart
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v0.15.0
安装完 cert-manager 后,您可以通过检查 cert-manager 命名空间中正在运行的 Pod 来验证它是否已正确部署:
kubectl get pods --namespace cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-5c6866597-zw7kh 1/1 Running 0 2m
cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m
cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m
根据您选择的 SSL 选项,通过 Helm 安装 Rancher
使用 Let’s Encrypt 证书
在下面的命令中,
- 将
hostname
设置为公共 DNS 记录。 - 将
ingress.tls.source
选项设置为letsEncrypt
。 - 将
letsEncrypt.email
设置为可通讯的电子邮件地址,方便发送通知(例如证书到期的通知)。 - 如果您在安装
alpha
版本,需要把--devel
选项添加到下面到 Helm 命令中。
sudo helm install rancher rancher-latest/rancher \
--namespace cattle-system \
--set hostname=rancher.whale.com \
--set ingress.tls.source=letsEncrypt \
--set letsEncrypt.email=kleechn@gmail.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
验证 Rancher Server 是否已成功部署
检查 Rancher Server 是否运行成功:
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
如果看到以下错误: error: deployment "rancher" exceeded its progress deadline
, 您可以通过运行以下命令来检查 deployment 的状态:
kubectl -n cattle-system get deploy rancher
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
rancher 3 3 3 3 3m
DESIRED
和AVAILABLE
应该显示相同的个数。
保存您的选项
请保存您使用的全部--set
选项。使用 Helm 升级 Rancher 到新版本时,您将需要使用相同的选项。
访问Rancher-UI
通过访问 上面章节中配置的hostname 来访问Rancher可视化控制台。
参考资料
RKE中文文档
Rancher 2.5 中文文档
Rancher 2.4.3 - HA 部署高可用k8s集群:肖祥
ubuntu1604搭建Rancher步骤:wuli洛玖
rancher rke部署kubernetes集群:willblog
怎么使用rke安装k8s集群?这么清楚了,你还看不懂吗:程序员阿轩