建设视频网站设计意义,公关工资一般多少钱一个月,做网站需要看的书,高端网站开发设计简介转载说明#xff1a;如果您喜欢这篇文章并打算转载它#xff0c;请私信作者取得授权。感谢您喜爱本文#xff0c;请文明转载#xff0c;谢谢。 本文记录使用RKE快速搭建一套k8s集群过程#xff0c;使用的rancher老版本2.5.7#xff08;当前最新版为2.7#xff09;。适用…
转载说明如果您喜欢这篇文章并打算转载它请私信作者取得授权。感谢您喜爱本文请文明转载谢谢。 本文记录使用RKE快速搭建一套k8s集群过程使用的rancher老版本2.5.7当前最新版为2.7。适用于初学测试、测试环境及定制化要求不高的生产环境。
关联文章
1. k8s集群搭建前的服务器初始化见文章《附1k8s服务器初始化》
2. rke搭建的k8s集群新增节点见文章《附2rke安装的k8s集群新增主机》 1. 前提
1.1 服务器规划
IPhostname角色部署内容10.99.68.62k8s-master01master-1rke/kubectl/helm执行k8s安装命令节点10.99.68.63k8s-master02master-210.99.68.64k8s-master03master-310.99.68.65k8s-node01worker-110.99.68.66k8s-node02worker-210.99.68.67k8s-node03worker-3测试rke部署的k8s集群添加新节点10.99.68.68rancherUIrancherUIrancher2.5.7
1.2 服务器初始化
可参考今日文章组附件《附1k8s服务器初始化》 1.3 镜像导入
1.3.1安装自己的私有docker仓库如harbor等
1.3.2 导入镜像
在https://github.com/rancher/rancher/releases页面找到需要的版本不要下载标记为rc或Pre-release的版本可能有坑尤其在生产环境下是不稳定的在一台能通公网的服务器执行下面三个文件下载镜像并导入私有仓库
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中的镜像并将它们推送到您自己的私有镜像库。 2. K8S集群安装
2.1 基础环境
2.1.1配置hosts解析
在三台master服务器的/etc/hosts文件添加以下三行配置三台服务器的hosts解析 10.99.68.62 k8s-master01
10.99.68.63 k8s-master02
10.99.68.64 k8s-master03
2.1.2 三台服务器之间做ssh信任
在3个节点上通过sre用户做免秘钥认证
# su sre
$ ssh-keygen -t rsa -b 4096
$ ssh-copy-id sre10.99.68.62
$ ssh-copy-id 10.99.68.63
$ ssh-copy-id 10.99.68.64
2.1.3 检查三台服务器之间时间是否同步
如不同步先同步三台服务器的时间。 2.2 k8s集群基础命令安装(sre用户下执行)
2.2.1 安装rke、kubectl、helm
1安装rke
将1.2.8_rke_linux-amd64文件上传到服务器并执行以下命令
$ mv 1.2.8_rke_linux-amd64 rke #给rke文件修改名字
$ chmod x rke sudo mv rke /usr/bin/ #添加执行权限并放入/usr/bin/目录下
$ rke --version #在sre用户测试运行rke命令
2安装kubectl
将1.21.2-kubectl文件上传到服务器并执行以下命令
$ mv 1.21.2-kubectl kubectl #给kubectl修改名字
$ chmod x kubectl sudo mv kubectl /usr/bin/ #给kubectl添加执行权限并移动到/usr/bin目录下
$ sudo yum install bash-completion -y #CentOS Linux上可能需要安装默认情况下未安装的bash-completion软件包
$ echo source (kubectl completion bash) ~/.bashrc #运行source (kubectl completion bash)可将kubectl自动补全添加到当前shell要使kubectl自动补全命令自动加载
$ source ~/.bashrc #source让上一步骤修改生效
$ kubectl version #测试sre用户能正常使用kubectl命令
3安装helm
将安装包helm-v3.6.1-linux-amd64.tar.gz上传到服务器并执行以下命令
$ tar xf helm-v3.6.1-linux-amd64.tar.gz
$ sudo mv linux-amd64/helm /usr/bin/
$ helm version #测试sre用户能正常使用helm
2.2.2 rke安装k8s集群
编辑rke创建集群的文件k8s-cluster.yml
nodes:- address: 10.99.68.62 internal_address: 10.99.68.62 user: srerole: [controlplane, etcd]hostname_override: k8s-master01ssh_key_path: /home/sre/.ssh/id_rsa- address: 10.99.68.63internal_address: 10.99.68.63user: srerole: [controlplane, etcd]hostname_override: k8s-master02ssh_key_path: /home/sre/.ssh/id_rsa- address: 10.99.68.64internal_address: 10.99.68.64user: srerole: [controlplane, etcd]hostname_override: k8s-master03ssh_key_path: /home/sre/.ssh/id_rsa- address: 10.99.68.65internal_address: 10.99.68.65user: srerole: [worker]hostname_override: k8s-node01ssh_key_path: /home/sre/.ssh/id_rsa- address: 10.99.68.66internal_address: 10.99.68.66user: srerole: [worker]hostname_override: k8s-node02ssh_key_path: /home/sre/.ssh/id_rsa
private_registries:- url: harbor.test.com:8000 #私人harbor仓库地址is_default: true
services:etcd:backup_config:enabled: trueinterval_hours: 6retention: 60
配置文件说明
参数-含义
address公共域名或IP地址
user可以运行docker命令的普通用户不能用root用户
role分配给节点的Kubernetes角色列表
internal_addres内部集群通信的私有域名或IP地址
hostname_overridk8s节点hostname
ssh_key_pat指定ssh免秘钥的路径
private_registrie指定私有harbor仓库的地址如果可以通外网的服务器就可以不配置
etcd开启了etcd的备份机制每隔6小时备份一次保存60天数据 文件编辑好后在k8s-master01执行以下命令启动k8s集群
rke up --config k8s-cluster.yml 成功安装完成后日志结尾如下图 在执行完成后当前目录下会创建kube_config_k8s-cluster.yml和k8s-cluster.rkestate两个文件 当排除故障、升级群集时需要用到以下文件请将其副本保存在一个安全的位置
k8s-cluster.ymlRKE部署k8s集群配置文件
kube_config_k8s-cluster.yml群集的Kubeconfig文件此文件包含完全访问群集的凭据。
k8s-cluster.rkestateKubernetes群集状态文件此文件包含完全访问群集的凭据。
现在不能直接执行kubectl get nodes 查看集群会报错
[srek8s-master01 rancher-cluster]$ kubectl get node
The connection to the server localhost:8080 was refused - did you specify the right host or port?
[srek8s-master01 rancher-cluster]$
sre用户下配置kubectl命令执行
$ mkdir ~/.kube
$ cp kube_config_k8s-cluster.yml ~/.kube
$ cp ~/.kube/kube_config_k8s-cluster.yml ~/.kube/config#可以把k8s-cluster.yml和 k8s-cluster.rkestate也备份一份过来以免丢失
$ cp k8s-cluster.yml ~/.kube/
$ cp k8s-cluster.rkestate ~/.kube/
配置完后就可以用kubectl get node命令直接查看集群了
[srek8s-master01 .kube]$ kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready controlplane,etcd 41m v1.20.6
k8s-master02 Ready controlplane,etcd 31m v1.20.6
k8s-master03 Ready controlplane,etcd 31m v1.20.6
k8s-node01 Ready worker 20m v1.20.6
k8s-node02 Ready worker 20m v1.20.6
[srek8s-master01 .kube]$
如果需要root用户执行kubectl切换到root用户执行以下命令
mkdir ~/.kube
cp /home/sre/.kube/config ./
3. Rancher管理k8s集群
rancher管理k8s集群有2种方法
一是将ks集群导入rancher管理界面;
二是在k8s集群上起动rancher应用直接接入管理集群。
不管是rke安装的还是别的方式如kubeadm安装的k8s都适用。
3.1 k8s集群导入rancher
3.1.1 部署一个rancher应用
在10.99.68.68服务器部署rancher此处使用的老版本2.5.7版本
[rootrancherUI App]# cat rancher.sh
#!/bin/bash
docker run -d --privileged --restartunless-stopped -p 8088:80 -p 8443:443 -e CATTLE_SYSTEM_DEFAULT_REGISTRYharbor.test.com:8000 -e CATTLE_SYSTEM_CATALOGbundled -v /home/rancher/rancher:/var/lib/rancher -v /home/rancher/auditlog:/var/log/auditlog --name rancher-server harbor.test.com:8000/rancher/rancher:v2.5.7
[rootrancherUI App]#
3.1.2 将k8s导入rancher
1在“全局”界面添加集群 2选择导入集群 3填写导入的集群名 4点击“创建”就会生成如下命令 命令
curl --insecure -sfL https://10.99.68.68:8443/v3/import/tzzhn4t4dkmnhlvzz8jm7gmx5xh5ddr8gvsgpljq78rsb8xhlc4znt_c-8cwtr.yaml | kubectl apply -f -
将以命令在k8s-master01节点sre用户下执行
[srek8s-master01 .kube]$ curl --insecure -sfL https://10.247.149.18:8443/v3/import/tzzhn4t4dkmnhlvzz8jm7gmx5xh5ddr8gvsgpljq78rsb8xhlc4znt_c-8cwtr.yaml | kubectl apply -f -
命令执行完毕后rancher界面能看到导入成功 查看主机5台节点均导入成功 3.2 在k8s上安装rancher
3.2.1 安装cert-manager
1将离线包cert-managerv1.7.1下载链接https://artifacthub.io/packages/helm/cert-manager/cert-manager/1.7.1上传到服务器k8s-master01解压
2下载离线CRD资源yaml文件https://github.com/jetstack/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml 3找一台通公网的服务器下载以下镜像并修改tag,上传到自己私有仓库
#下载镜像
docker pull quay.io/jetstack/cert-manager-controller:v1.7.1
docker pull quay.io/jetstack/cert-manager-webhook:v1.7.1
docker pull quay.io/jetstack/cert-manager-cainjector:v1.7.1
docker pull quay.io/jetstack/cert-manager-ctl:v1.7.1
#修改tag
docker tag quay.io/jetstack/cert-manager-controller:v1.7.1 harbor.test.com:8000/rancher/cert-manager-controller:v1.7.1
docker tag quay.io/jetstack/cert-manager-webhook:v1.7.1 harbor.test.com:8000/rancher/cert-manager-webhook:v1.7.1
docker tag quay.io/jetstack/cert-manager-cainjector:v1.7.1 harbor.test.com:8000/rancher/cert-manager-cainjector:v1.7.1
docker tag quay.io/jetstack/cert-manager-ctl:v1.7.1 harbor.test.com:8000/rancher/cert-manager-ctl:v1.7.1
#上传镜像
docker push harbor.test.com:8000/rancher/cert-manager-controller:v1.7.1
docker push harbor.test.com:8000/rancher/cert-manager-webhook:v1.7.1
docker push harbor.test.com:8000/rancher/cert-manager-cainjector:v1.7.1
docker push harbor.test.com:8000/rancher/cert-manager-ctl:v1.7.1
4批量修改cert-manager里面的image地址将“quay.io/jetstack/”全部改为自己私有仓库地址“ harbor.test.com:8000/rancher/”。
5执行命令安装cert-manager
cd cert-managerv1.7.1
kubectl apply -f cert-manager.crds.yaml #离线升级CRD资源
#正式安装cert-manager
helm install cert-manager ./cert-manager-v1.7.1 \--namespace cert-manager \--create-namespace \--version v1.7.1
6查看pod
[rootk8s-master01 ~]# kubectl get pod -n cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-5698c7c8d7-8w68r 1/1 Running 0 16m
cert-manager-cainjector-57bf5766bd-9ml2x 1/1 Running 0 16m
cert-manager-webhook-7bd6cfc99c-hbz8c 1/1 Running 0 16m
[rootk8s-master01 ~]# 3.2.2 安装rancher
1下载rancher2.5.7离线helm安装包
安装命令
helm install rancher ./rancher-v2.5.7 \--namespace cattle-system \--create-namespace \--set hostnamerancher.test.com \ #rancher不要以local域名命名--set replicas1 \ #指定启动几个rancher pod可以启动多个--version 2.5.7
2查看ingress: 3windows电脑本地绑定hosts
10.9.68.65 rancher.test.com #在ingress的SDDRESS中任意绑定一个IP
4浏览器访问https://rancher.test.com设置admin用户的密码后跳转到URL这里默认就是使用的上一步骤设置的域名默认即可。 5进入rancher就能看到集群了这里的集群名就是local: 完