1、准备节点
先决条件
kubernetes 安装 (推荐)
- 操作系统:CentOS 7.8.2003 (Core) 3.10.0-1127.el7.x86_64(最小化安装)
基本初始化:安装必要工具,关闭selinux,firewalld
yum install vim wget telnet net-tools -y
systemctl disable firewalld
systemctl stop firewalld
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
ntpdate ntp.aliyun.com
Docker安装
- yum安装
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo systemctl start docker
sudo systemctl enable docker
私有仓库
- 选用harbor仓库(用于同步镜像)
- 配置私有仓库及加速地址
vim /etc/docker/daemon.json
{
"registry-mirrors":["https://zka0zo66.mirror.aliyuncs.com"],
"insecure-registries": ["https://harbor.ddc.com","https://registry.ddc.com"]
}
CLI工具
- kubectl:kubernetes命令行工具
- rke:Rancher
Kubernetes引擎,用于构建集群的Cli。 - helm:Kubernetes的软件包管理。
2.同步镜像到私有镜像仓库
先决条件
- 浏览https://github.com/rancher/rancher/releases,查找对应的版本,不要下载标记为 rc 或 Pre-release 的版本,因为它们在生产环境下是不稳定的。
- 从发行版 Assets 部分下载以下文件:
Release文件 | 描述 |
---|---|
rancher-images.txt | 此文件包含安装 Rancher、创建集群和运行 Rancher 工具所需的镜像列表。 |
rancher-save-images.sh | 这个脚本会从 DockerHub 中拉取在文件rancher-images.txt中描述的所有镜像,并将它们保存为文件rancher-images.tar.gz。 |
rancher-load-images.sh | 这个脚本会载入文件rancher-images.tar.gz中的镜像,并将它们推送到您自己的私有镜像库。 |
- 收集及保存所需要的镜像
# 对镜像列表进行排序和唯一化,以去除重复的镜像源。
sort -u rancher-images.txt -o rancher-images.txt
# 对镜像列表进行排序和唯一化,以去除重复的镜像源。
chmod +x rancher-save-images.sh
# 执行脚本rancher-save-images.sh并以--image-list ./rancher-images.txt 作为参数,创建所需镜像的压缩包
./rancher-save-images.sh --image-list ./rancher-images.txt
- 推送镜像到私有仓库
# 登录私有仓库
docker login <REGISTRY.YOURDOMAIN.COM:PORT>
# 添加rancher-load-images.sh文件的可执行权限
chmod +x rancher-load-images.sh
# 使用脚本 rancher-load-images.sh提取rancher-images.tar.gz文件中的镜像,根据文件rancher-images.txt中的镜像列表对提取的镜像文件重新打 tag 并推送到您的私有镜像库中。
./rancher-load-images.sh --image-list ./rancher-images.txt --registry <REGISTRY.YOURDOMAIN.COM:PORT>`
3.安装 Kubernetes 集群
创建 RKE 配置文件
在可以访问主机节点上的端口 22 / tcp 和 6443 / tcp 的系统上,使用以下示例创建一个名为rancher-cluster.yml的新文件。该文件是 Rancher Kubernetes Engine 的配置文件(RKE 配置文件)
使用您创建的3 个节点的 IP 地址或 DNS 名称,替换下面的代码示例中的值。
RKE选项
选项 | 必选 | 描述 |
---|---|---|
address | ✔️ | 离线环境中节点的 DNS 或 IP |
user | ✔️ | 可以在节点上执行 docker 命令的用户 |
roule | ✔️ | 给节点分配的 Kubernetes 角色列表 |
internal_address | 可选 | 离线环境中节点的内部 DNS 或内网 IP |
ssh_key_path | 用来登录节点的 SSH 私钥文件路径(默认值为~/.ssh/id_rsa) |
vim rancher-cluster.yml
nodes:
- address: 10.10.3.187 # 离线环境节点 IP
internal_address: 172.31.7.22 # 节点内网 IP
user: rancher
role: ["controlplane", "etcd", "worker"]
ssh_key_path: /home/user/.ssh/id_rsa
- address: 10.10.3.254 # 离线环境节点 IP
internal_address: 172.31.13.132 # 节点内网 IP
user: rancher
role: ["controlplane", "etcd", "worker"]
ssh_key_path: /home/user/.ssh/id_rsa
- address: 10.10.3.89 # 离线环境节点 IP
internal_address: 172.31.3.216 # 节点内网 IP
user: rancher
role: ["controlplane", "etcd", "worker"]
ssh_key_path: /home/user/.ssh/id_rsa
private_registries:
- url: <REGISTRY.YOURDOMAIN.COM:PORT> # 私有镜像库地址
user: rancher
password: "*********"
is_default: true)
执行RKE
rke up --config ./rancher-cluster.yml
保存文件
故障排查和升级集群时,需要用到以下文件,请将它们的的副本保存在安全的位置:
- rancher-cluster.yml:RKE 配置文件
- kube_config_rancher-cluster.yml:Kubeconfig 文件
- rancher-cluster.rkestate:Kubernetes 集群状态文件
it@ITdeMacBook-Pro ~/rancher-rke (master)> kubectl --kubeconfig ./kube_config_rancher-cluster.yml get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
ingress-nginx default-http-backend-c5858f787-h4hls 1/1 Running 0 7m54s
ingress-nginx nginx-ingress-controller-6wftp 1/1 Running 0 7m57s
ingress-nginx nginx-ingress-controller-hgvpk 1/1 Running 0 7m57s
ingress-nginx nginx-ingress-controller-rpp8n 1/1 Running 0 7m57s
kube-system canal-bx256 2/2 Running 0 8m39s
kube-system canal-gh76k 2/2 Running 0 8m39s
kube-system canal-nxgkm 2/2 Running 0 8m39s
kube-system coredns-65cc9c4f59-76whl 1/1 Running 0 8m8s
kube-system coredns-65cc9c4f59-k5t5k 1/1 Running 0 8m29s
kube-system coredns-autoscaler-84578cd8d5-kbfnk 1/1 Running 0 8m27s
kube-system metrics-server-6759fcbd77-l4zbw 1/1 Running 0 8m12s
kube-system rke-coredns-addon-deploy-job-tx84n 0/1 Completed 0 8m35s
kube-system rke-ingress-controller-deploy-job-2tz74 0/1 Completed 0 8m7s
kube-system rke-metrics-addon-deploy-job-2bsp4 0/1 Completed 0 8m25s
kube-system rke-network-plugin-deploy-job-427bb 0/1 Completed 0 8m41s
4.安装Rancher
添加 Helm Chart 仓库
从可以访问 Internet 的系统中,获取最新的 Rancher Helm Chart,然后将内容复制到可以访问 Rancher Server 集群的系统中。
- 如果您还没有在有互联网访问的系统上进行 helm 初始化。请运行下面的命令。注意:请参考Helm 版本要求来选择一个 Helm 版本来安装 Rancher。
helm init -c
- 使用helm repo add来添加仓库,不同的地址适应不同的 Rancher 版本,请替换命令中的<CHART_REPO>,替换为latest,stable或alpha。
- latest: 推荐在尝试新功能时使用。
- stable: 推荐生产环境中使用。(推荐)
- alpha: 未来版本的实验性预览。
helm repo add rancher-<CHART_REPO> https://releases.rancher.com/server-charts/<CHART_REPO>
- 获取最新的 Rancher Chart,您会看到对应的 tgz 文件下载到本地。
helm fetch rancher-<CHART_REPO>/rancher
SSL 配置
- 添加TLS密文
kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=tls.crt \
--key=tls.key
- 使用私有CA签发证书
kubectl -n cattle-system create secret generic tls-ca \
--from-file=cacerts.pem=./cacerts.pem
配置 Rancher Helm 模板
helm template rancher ./rancher-<VERSION>.tgz --output-dir . \
--namespace cattle-system \
--set hostname=<RANCHER.YOURDOMAIN.COM> \
--set rancherImage=<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher \
--set ingress.tls.source=secret \
--set privateCA=true \
--set systemDefaultRegistry=<REGISTRY.YOURDOMAIN.COM:PORT> \ # 自v2.2.0可用,设置默认的系统镜像仓库
--set useBundledSystemChart=true # 自v2.3.0可用,使用内嵌的 Rancher system charts
安装 Rancher
kubectl create namespace cattle-system
kubectl -n cattle-system apply -R -f ./rancher
Nginx配置实例
- 将 IP_NODE1, IP_NODE2 和 IP_NODE3 替换为您的集群节点的 IP 地址。
- 将出现的两个FQDN替换为 Rancher 的 DNS 名称。
- 将/certs/fullchain.pem和/certs/privkey.pem分别替换为服务器证书和服务器证书密钥的位置。
NGINX 配置示例一
worker_processes 4;
worker_rlimit_nofile 40000;
events {
worker_connections 8192;
}
stream {
upstream rancher_servers_http {
least_conn;
server <IP_NODE_1>:80 max_fails=3 fail_timeout=5s;
server <IP_NODE_2>:80 max_fails=3 fail_timeout=5s;
server <IP_NODE_3>:80 max_fails=3 fail_timeout=5s;
}
server {
listen 80;
proxy_pass rancher_servers_http;
}
upstream rancher_servers_https {
least_conn;
server <IP_NODE_1>:443 max_fails=3 fail_timeout=5s;
server <IP_NODE_2>:443 max_fails=3 fail_timeout=5s;
server <IP_NODE_3>:443 max_fails=3 fail_timeout=5s;
}
server {
listen 443;
proxy_pass rancher_servers_https;
}
}
NGINX 配置示例二
vim /etc/nginx.conf
worker_processes 4;
worker_rlimit_nofile 40000;
events {
worker_connections 8192;
}
http {
upstream rancher {
server IP_NODE_1:80;
server IP_NODE_2:80;
server IP_NODE_3:80;
}
map $http_upgrade $connection_upgrade {
default Upgrade;
'' close;
}
server {
listen 443 ssl http2;
server_name FQDN;
ssl_certificate /certs/fullchain.pem;
ssl_certificate_key /certs/privkey.pem;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://rancher;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# 这里将允许您在 Rancher UI 中打开命令行窗口时,窗口可以保留最多15分钟。没有这个参数时,默认值为1分钟,一分钟后在Rancher中的shell会自动关闭。
proxy_read_timeout 900s;
proxy_buffering off;
}
}
server {
listen 80;
server_name FQDN;
return 301 https://$server_name$request_uri;
}
}
将 NGINX 作为 Docker 容器运行
除了可以将 NGINX 作为软件包安装在操作系统上外,您也可以将其作为 Docker 容器运行。将已编辑的示例 NGINX 配置另存为/etc/nginx.conf并运行以下命令启动 NGINX 容器:
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
-v /etc/nginx.conf:/etc/nginx/nginx.conf \
nginx:1.14