介绍

本文主要目的在于记录rancher ha集群搭建步骤,内容包括系统配置、docker安装、k8s安装、rancher ha安装等。
Rancher容器编排工具搭建 - 图1
服务器环境信息:
Rancher容器编排工具搭建 - 图2

环境设置

操作系统文件限制

vim /etc/security/limits.conf
在文件末尾添加以下内容:

  1. root soft nofile 655350
  2. root hard nofile 655350
  3. * soft nofile 655350
  4. * hard nofile 655350

关闭防火墙

  1. systemctl stop firewalld
  2. systemctl disable firewalld

关闭setlinx

将SELINUX值设置为disabled:
vim /etc/selinux/config

  1. SELINUX=disabled

关闭swap

注释或删除swap交换分区:vim /etc/fstab

  1. # /etc/fstab
  2. # Created by anaconda on Fri Jun 2 14:11:50 2017
  3. #
  4. # Accessible filesystems, by reference, are maintained under '/dev/disk'
  5. # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
  6. #
  7. /dev/mapper/centos-root / xfs defaults 0 0
  8. UUID=f5b4435a-77bc-48f4-8d22-6fa55e9e04a2 /boot xfs defaults 0 0
  9. /dev/mapper/centos-grid0 /grid0 xfs defaults 0 0
  10. #/dev/mapper/centos-swap swap swap defaults 0 0

kernel调优

添加如下内容,vim /etc/sysctl.conf:

  1. net.ipv4.ip_forward=1
  2. net.bridge.bridge-nf-call-iptables=1
  3. net.bridge.bridge-nf-call-ip6tables=1
  4. vm.swappiness=0
  5. vm.max_map_count=655360

创建用户

创建用户并且添加到docker组:

  1. useradd rancher -G docker

ssh免密登录

在31-33服务器上执行下面命令:

  1. su - rancher
  2. ssh-keygen -t rsa
  3. ssh-copy-id -i .ssh/id_rsa.pub rancher@192.168.100.31
  4. ssh-copy-id -i .ssh/id_rsa.pub rancher@192.168.100.32
  5. ssh-copy-id -i .ssh/id_rsa.pub rancher@192.168.100.33

root用户也需要ssh免密登录,命令参考:

  1. su - root
  2. ssh-keygen -t rsa
  3. ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.31
  4. ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.32
  5. ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.33

docker安装

rke工具目前只支持docker v17.03.2,请务必保持版本一致,否则后续安装会报错。
1、安装repo源:

  1. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

卸载旧docker版本:

  1. yum remove -y docker \
  2. docker-client \
  3. docker-client-latest \
  4. docker-common \
  5. docker-latest \
  6. docker-latest-logrotate \
  7. docker-logrotate \
  8. docker-selinux \
  9. docker-engine-selinux \
  10. docker-engine \
  11. container*

2、安装自定义版本

  1. export docker_version=17.03.2

3、安装必要的一些系统工具

  1. yum install -y yum-utils device-mapper-persistent-data lvm2 bash-completion

4、添加软件源信息

  1. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5、安装docker-ce

  1. version=$(yum list docker-ce.x86_64 --showduplicates | sort -r|grep ${docker_version}|awk '{print $2}')
  2. yum -y install --setopt=obsoletes=0 docker-ce-${version} docker-ce-selinux-${version}

6、开机自启动

  1. systemctl enable docker

7、添加国内加速代理,设置storage-driver
vim /etc/docker/daemon.json
输入如下内容:

  1. {
  2. "registry-mirrors": ["https://39r65dar.mirror.aliyuncs.com"],
  3. "storage-driver": "overlay2",
  4. "storage-opts": [
  5. "overlay2.override_kernel_check=true"
  6. ]
  7. }

8、重启docker

  1. systemctl restart docker

安装nginx

在192.168.100.22服务器上安装nginx用户rancher-server负载均衡。
安装nginx:

  1. sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
  2. yum install nginx -y
  3. sudo systemctl enable nginx.service

修改配置文件:vi /etc/nginx/nginx.conf

  1. user nginx;
  2. worker_processes 4;
  3. worker_rlimit_nofile 40000;
  4. events {
  5. worker_connections 8192;
  6. }
  7. http {
  8. # Gzip Settings
  9. gzip on;
  10. gzip_disable "msie6";
  11. gzip_disable "MSIE [1-6]\.(?!.*SV1)";
  12. gzip_vary on;
  13. gzip_static on;
  14. gzip_proxied any;
  15. gzip_min_length 0;
  16. gzip_comp_level 8;
  17. gzip_buffers 16 8k;
  18. gzip_http_version 1.1;
  19. gzip_types text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml application/font-woff text/javascript application/javascript application/x-javascript text/x-json application/json application/x-web-app-manifest+json text/css text/plain text/x-component font/opentype application/x-font-ttf application/vnd.ms-fontobject font/woff2 image/x-icon image/png image/jpeg;
  20. server {
  21. listen 80;
  22. return 301 https://$host$request_uri;
  23. }
  24. }
  25. stream {
  26. upstream rancher_servers {
  27. least_conn;
  28. server 192.168.100.31:443 max_fails=3 fail_timeout=5s;
  29. server 192.168.100.32:443 max_fails=3 fail_timeout=5s;
  30. server 192.168.100.33:443 max_fails=3 fail_timeout=5s;
  31. }
  32. server {
  33. listen 443;
  34. proxy_pass rancher_servers;
  35. }
  36. }

启动nginx:

  1. sudo systemctl restart nginx.service

Rancher集群部署

安装必要工具

在291.168.100.31服务器上进行下面操作。
安装rke:

  1. su root
  2. wget https://www.cnrancher.com/download/rke/rke_linux-amd64
  3. chmod +x rke_linux-amd64
  4. mv rke_linux-amd64 /usr/bin/rke

安装kubectl:

  1. wget https://www.cnrancher.com/download/kubectl/kubectl_amd64-linux
  2. chmod +x kubectl_amd64-linux
  3. mv kubectl_amd64-linux /usr/bin/kubectl

安装helm:

  1. wget https://storage.googleapis.com/kubernetes-helm/helm-v2.11.0-linux-amd64.tar.gz
  2. tar zxvf helm-v2.12.0-linux-amd64.tar.gz
  3. mv linux-amd64/helm /usr/bin/helm
  4. mv linux-amd64/tiller /usr/bin/tiller
  5. rm -rf helm-v2.12.0-linux-amd64.tar.gz linux-amd64/

安装k8s

1、切换到rancher用户
su - rancher
2、创建rancher集群配置文件:
vim rancher-cluster.yml
输入如下内容:

  1. nodes:
  2. - address: 192.168.100.31
  3. user: rancher
  4. role: [controlplane,worker,etcd]
  5. - address: 192.168.100.32
  6. user: rancher
  7. role: [controlplane,worker,etcd]
  8. - address: 192.168.100.33
  9. user: rancher
  10. role: [controlplane,worker,etcd]
  11. services:
  12. etcd:
  13. snapshot: true
  14. creation: 6h
  15. retention: 24h

如果之前操作失败,重新安装需要清理数据:

  1. su - root
  2. rm -rf /var/lib/rancher/etcd/*
  3. rm -rf /etc/kubernetes/*
  4. su - rancher
  5. rke remove --config ./rancher-cluster.yml

3、启动集群

  1. rke up --config ./rancher-cluster.yml

完成后,它应显示:Finished building Kubernetes cluster successfully。

4、配置环境变量:
切换到root用户su - root
vim /etc/profile
export KUBECONFIG=/home/rancher/kube_config_rancher-cluster.yml
保存,并执行:**
source /etc/profile

5、通过kubectl测试您的连接,并查看您的所有节点是否处于Ready状态

  1. [rancher@bigman-s1 ~]$ kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. 192.168.100.31 Ready controlplane,etcd,worker 3m v1.11.6
  4. 192.168.100.32 Ready controlplane,etcd,worker 3m v1.11.6
  5. 192.168.100.33 Ready controlplane,etcd,worker 3m v1.11.6

6、检查集群Pod的运行状况

  1. [rancher@bigman-s1 ~]$ kubectl get pods --all-namespaces
  2. NAMESPACE NAME READY STATUS RESTARTS AGE
  3. ingress-nginx default-http-backend-797c5bc547-z4gj5 1/1 Running 0 3m
  4. ingress-nginx nginx-ingress-controller-bvgxm 1/1 Running 0 3m
  5. ingress-nginx nginx-ingress-controller-rjrss 1/1 Running 0 3m
  6. ingress-nginx nginx-ingress-controller-z5nmf 1/1 Running 0 3m
  7. kube-system canal-cwb9g 3/3 Running 0 4m
  8. kube-system canal-lnvmt 3/3 Running 0 4m
  9. kube-system canal-xfft6 3/3 Running 0 4m
  10. kube-system kube-dns-7588d5b5f5-5lql6 3/3 Running 0 4m
  11. kube-system kube-dns-autoscaler-5db9bbb766-qlskd 1/1 Running 0 4m
  12. kube-system metrics-server-97bc649d5-vx7p7 1/1 Running 0 4m
  13. kube-system rke-ingress-controller-deploy-job-ghz5d 0/1 Completed 0 3m
  14. kube-system rke-kubedns-addon-deploy-job-snkfq 0/1 Completed 0 4m
  15. kube-system rke-metrics-addon-deploy-job-kzlwb 0/1 Completed 0 4m
  16. kube-system rke-network-plugin-deploy-job-4f8ms 0/1 Completed 0 4m

保存kube_config_rancher-cluster.yml和rancher-cluster.yml文件的副本,您将需要这些文件来维护和升级Rancher实例。

Helm

使用Helm在集群上安装tiller服务以管理charts,由于RKE默认启用RBAC, 因此我们需要使用kubectl来创建一个serviceaccount,clusterrolebinding才能让tiller具有部署到集群的权限。

1、在kube-system命名空间中创建ServiceAccount:

  1. kubectl -n kube-system create serviceaccount tiller

2、创建ClusterRoleBinding以授予tiller帐户对集群的访问权限:

  1. kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

3、安装Helm Server(Tiller)

  1. helm init --service-account tiller --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

4、安装Tiller金丝雀版本

  1. helm init --service-account tiller --canary-image

需要修改成国内镜像(可能需要delete再重新init)

  1. export TILLER_TAG=v2.12.0 ;
  2. kubectl --namespace=kube-system set image deployments/tiller-deploy tiller=hongxiaolu/tiller:$TILLER_TAG

helm安装rancher

添加Chart仓库地址

使用helm repo add命令添加Rancher chart仓库地址,访问Rancher tag和Chart版本
替换为您要使用的Helm仓库分支(即latest或stable)。
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

安装证书管理器

1、只有Rancher自动生成的证书和LetsEncrypt颁发的证书才需要cert-manager。如果是你自己的证书,可使用ingress.tls.source=secret参数指定证书,并跳过此步骤。

  1. helm install stable/cert-manager \
  2. --name cert-manager \
  3. --namespace kube-system

Rancher自动生成证书
默认情况下,Rancher会自动生成CA根证书并使用cert-manager颁发证书以访问Rancher server界面。
唯一的要求是将hostname配置为访问Rancher的域名地址,使用这种SSL证书配置方式需提前安装证书管理器。

  1. helm install rancher-stable/rancher \
  2. --name rancher \
  3. --namespace cattle-system \
  4. --set hostname=hi.rancher.cn

hi.rancher.cn就是后面访问rancher的域名,需要在/etc/hosts文件中添加关联(所有主机):
vim /etc/hosts
192.168.100.22 hi.rancher.cn
由于我们通过hosts文件来添加映射,所以需要为Agent Pod添加主机别名(/etc/hosts):

  1. kubectl -n cattle-system patch deployments cattle-cluster-agent --patch '{
  2. "spec": {
  3. "template": {
  4. "spec": {
  5. "hostAliases": [
  6. {
  7. "hostnames":
  8. [
  9. "hi.rancher.cn"
  10. ],
  11. "ip": "192.168.100.22"
  12. }
  13. ]
  14. }
  15. }
  16. }
  17. }'
  18. kubectl -n cattle-system patch daemonsets cattle-node-agent --patch '{
  19. "spec": {
  20. "template": {
  21. "spec": {
  22. "hostAliases": [
  23. {
  24. "hostnames":
  25. [
  26. "hi.rancher.cn"
  27. ],
  28. "ip": "192.168.100.22"
  29. }
  30. ]
  31. }
  32. }
  33. }
  34. }'

登录rancher管理端

1、需要在/etc/hosts文件中添加关联(所有主机):
vim /etc/hosts
192.168.100.22 hi.rancher.cn
2、使用域名登录https://hi.rancher.cn
Rancher容器编排工具搭建 - 图3
输入:admin/admin,设置用户密码。
3、登录之后,此时可以看到已经创建好的k8s集群
Rancher容器编排工具搭建 - 图4

安装rancher-cli

1、下载rancher-cli工具

  1. wget https://releases.rancher.com/cli2/v2.0.6/rancher-linux-amd64-v2.0.6.tar.gz
  2. tar zxvf rancher-linux-amd64-v2.0.6.tar.gz

2、配置变量

  1. mv rancher-v2.0.6/rancher /usr/bin/rancher
  2. rm -rf rancher-v2.0.6/

3、测试登录
新建用户获取tonken:
Rancher容器编排工具搭建 - 图5
使用创建好的用户token登录:

  1. rancher login https://hi.rancher.cn/v3 --token token-jpf2f:sjmptntdn6k7rf9mqz7k7c9w77q6pfxmxmr7fvtdjwswbprpjhzvq8

其它帮助

docker xfs type问题

在运行docker info 命令时,如果你的文件系统使用了xfs,那么Docker会检测ftype的值,如果ftype=0,那么会有警告出现。
具体警告如下:
WARNING: overlay: the backing xfs filesystem is formatted without d_type support, which leads to incorrect behavior.
Reformat the filesystem with ftype=1 to enable d_type support.
Running without d_type support will not be supported in future releases.
这个问题需要解决,否则后续容器会出现异常退出等情况,具体docker为什么这么关系ftype值,可以去百度或者查阅官方文档。
由于docker默认是安装在系统盘的,那么重新格式化分区并挂盘肯定是行不通的,我这边环境正好还有多余的盘,所以讲docker切换到新的分区,并将分区参数调成成ftype=1。
1、查看分区信息
[root@bigman-s1 ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 32858088 0 32858088 0% /dev
tmpfs 32871880 8 32871872 1% /dev/shm
tmpfs 32871880 61024 32810856 1% /run
tmpfs 32871880 0 32871880 0% /sys/fs/cgroup
/dev/mapper/centos-root 598661528 81105212 517556316 14% /
/dev/mapper/centos-grid0 1227397576 66398088 1160999488 6% /grid0
2、重新格式化磁盘(注意备份数据)
umount /dev/mapper/centos-grid0
mkfs.xfs -n ftype=1 -f /dev/mapper/centos-grid0
mount /dev/mapper/centos-grid0 /grid0
xfs_info /grid0
3、修改docker数据目录
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd —graph /grid0/docker
4、修改docker storage-driver驱动
{
“registry-mirrors”: [“https://39r65dar.mirror.aliyuncs.com“],
“storage-driver”: “overlay2”,
“storage-opts”: [
“overlay2.override_kernel_check=true”
]
}
5、重启docker
systemctl disable docker
systemctl enable docker
systemctl daemon-reload
systemctl restart docker
docker info
docker本地仓库
1、启动本地仓库服务:
docker run -d -p 5000:5000 —restart=always —name registry registry:2
2、修改配置
vi /etc/docker/daemon.json
{
“registry-mirrors”: [“https://39r65dar.mirror.aliyuncs.com","http://192.168.100.21:5000“],
“storage-driver”: “overlay2”,
“storage-opts”: [
“overlay2.override_kernel_check=true”
],
“insecure-registries” : [“192.168.100.21:5000”]
}