2019独角兽企业重金招聘Python工程师标准>>>
介绍
本文主要目的在于记录rancher ha集群搭建步骤,内容包括系统配置、docker安装、k8s安装、rancher ha安装等。
服务器环境信息:
节点名称 | IP | OS | 安装软件 |
---|---|---|---|
Master | 192.168.100.22 | Centos7.6 | nginx |
Node1 | 192.168.100.31 | Centos7.6 | etcd, docker, k8s |
Node2 | 192.168.100.32 | Centos7.6 | etcd, docker, k8s |
Node3 | 192.168.100.33 | Centos7.6 | etcd, docker, k8s |
环境设置
操作系统文件限制
vi /etc/security/limits.conf
在文件末尾添加以下内容:
1 2 3 4 |
root soft nofile 655350 root hard nofile 655350 * soft nofile 655350 * hard nofile 655350 |
关闭防火墙
1 2 |
systemctl stop firewalld systemctl disable firewalld |
关闭setlinx
将SELINUX
值设置为disabled:
1 2 |
vim /etc/selinux/config SELINUX=disabled |
关闭swap
注释或删除swap交换分区:vi /etc/fstab
1 2 3 4 5 6 7 8 9 10 11 |
# # /etc/fstab # Created by anaconda on Fri Jun 2 14:11:50 2017 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=f5b4435a-77bc-48f4-8d22-6fa55e9e04a2 /boot xfs defaults 0 0 /dev/mapper/centos-grid0 /grid0 xfs defaults 0 0 #/dev/mapper/centos-swap swap swap defaults 0 0 |
临时关闭:
1 |
swapoff -a |
kernel调优
添加如下内容,vi /etc/sysctl.conf:
1 2 3 4 5 |
net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 vm.swappiness=0 vm.max_map_count=655360 |
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
2
3
4
5
6
7
8
9
10
11
|
yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
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
2
|
version=$(yum list docker-ce.x86_64 --showduplicates | sort -r|grep ${docker_version}|awk '{print $2}')
yum -y install --setopt=obsoletes=0 docker-ce-${version} docker-ce-selinux-${version}
|
6、开机自启动
1
|
systemctl enable docker |
7、添加国内加速代理,设置storage-driver
vi /etc/docker/daemon.json
{
"max-concurrent-downloads": 3,
"max-concurrent-uploads": 5,
"registry-mirrors": ["https://oegbalmw.mirror.aliyuncs.com"],
"insecure-registries":["192.168.0.253:5000"],
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
######
容器在运行时会产生大量日志文件,很容易占满磁盘空间。通过配置日志驱动来限制文件大小与文件的数量。 >限制单个日志文件为100M,最多产生3个日志文件
-------------
配置Docker存储驱动
存储驱动有很多种,例如:overlay、overlay2、devicemapper等,前两者是OverlayFS类型的,是一个新一代的联合文件系统,类似于AUFS,但速度更快,更加稳定。这里推荐新版的overlay2。
要求:
overlay2: Linux内核版本4.0或更高版本,或使用内核版本3.10.0-514+的RHEL或CentOS
支持的磁盘文件系统:ext4(仅限RHEL 7.1),xfs(RHEL7.2及更高版本),需要启用d_type=true
8、重启docker
1 |
systemctl restart docker |
创建用户
创建用户并且添加到docker组:
1 |
useradd rancher -G docker |
修改hosts(所有节点)
vi /etc/hosts
192.168.100.31 k8s-node1
192.168.100.32 k8s-node2
192.168.100.33 k8s-node3
ssh免密登录(centos7 系统需要手工用rancher用户去创建authorized_keys,且包含所有节点密钥再里面,Ubuntu则不用这样)
在31-33服务器上执行下面命令:
1 2 3 4 5 |
#在所有节点主机上执行 su - rancher ssh-keygen -t rsa ##一直回车键就好 再免密登录机器上执行以下 ssh-copy-id -i .ssh/id_rsa.pub [email protected] ssh-copy-id -i .ssh/id_rsa.pub [email protected] ssh-copy-id -i .ssh/id_rsa.pub [email protected] |
可能root用户也需要ssh免密登录,命令参考:
1 2 3 4 5 |
su - root ssh-keygen -t rsa ssh-copy-id -i .ssh/id_rsa.pub [email protected] ssh-copy-id -i .ssh/id_rsa.pub [email protected] ssh-copy-id -i .ssh/id_rsa.pub [email protected] |
把非root用户加入docker用户组
sudo usermod -aG docker rancher sudo systemctl restart docker sudo chmod a+rw /var/run/docker.sock
注:USERNAME填写自己的用户名
注:因为CentOS的安全限制,通过RKE安装K8S集群时候无法使用root账户。所以,建议CentOS用户使用非root用户来运行docker
nginx安装
在192.168.100.22服务器上安装nginx用户rancher-server负载均衡。
安装nginx:
1 2 3 |
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm yum install nginx -y sudo systemctl enable nginx.service #设置开机启动 |
修改配置文件:vim /etc/nginx/nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
user nginx; worker_processes 4; worker_rlimit_nofile 40000; events { worker_connections 8192; } http { # Gzip Settings gzip on; gzip_disable "msie6"; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; gzip_vary on; gzip_static on; gzip_proxied any; gzip_min_length 0; gzip_comp_level 8; gzip_buffers 16 8k; gzip_http_version 1.1; 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; server { listen 80; return 301 https://$host$request_uri; } } stream { upstream rancher_servers { least_conn; server 192.168.100.31:443 max_fails=3 fail_timeout=5s; server 192.168.100.32:443 max_fails=3 fail_timeout=5s; server 192.168.100.33:443 max_fails=3 fail_timeout=5s; } server { listen 443; proxy_pass rancher_servers; } } |
启动nginx:
1 |
sudo systemctl restart nginx.service |
Rancher集群部署
安装必要工具
在192.168.100.31服务器上进行下面操作。
安装rke:
1 2 3 4 |
su root wget https://github.com/rancher/rke/releases/download/v0.1.18/rke_linux-amd64 chmod +x rke_linux-amd64 mv rke_linux-amd64 /usr/bin/rke |
安装kubectl:
1 2 3 |
chmod +x kubectl_amd64-linux mv kubectl_amd64-linux /usr/bin/kubectl |
安装helm:
1 2 3 4 5 |
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.11.0-linux-amd64.tar.gz tar zxvf helm-v2.11.0-linux-amd64.tar.gz mv linux-amd64/helm /usr/bin/helm mv linux-amd64/tiller /usr/bin/tiller rm -rf helm-v2.11.0-linux-amd64.tar.gz linux-amd64/ |
其它工具下载地址:https://www.cnrancher.com/docs/rancher/v2.x/cn/installation/download/
安装k8s
1、切换到rancher用户
1 |
su - rancher |
2、创建rancher集群配置文件:
vi rancher-cluster.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
nodes: - address: 192.168.100.31 user: rancher role: [controlplane,worker,etcd] - address: 192.168.100.32 user: rancher role: [controlplane,worker,etcd] - address: 192.168.100.33 user: rancher role: [controlplane,worker,etcd] services: etcd: snapshot: true creation: 6h retention: 24h |
如果之前操作失败,重新安装需要清理数据:
1 2 3 4 5 |
su - root rm -rf /var/lib/rancher/etcd/* rm -rf /etc/kubernetes/* su - rancher rke remove --config ./rancher-cluster.yml |
3、启动集群
1 |
rke up --config ./rancher-cluster.yml |
这里有跳坑资料 http://www.eryajf.net/2675.html
完成后,它应显示:Finished building Kubernetes cluster successfully。
4、配置环境变量:
切换到root用户su - root
vi /etc/profile
1 |
export KUBECONFIG=/home/rancher/kube_config_rancher-cluster.yml |
保存,并执行:
1 |
source /etc/profile |
5、通过kubectl测试您的连接,并查看您的所有节点是否处于Ready状态
1 2 3 4 5 |
[rancher@bigman-s1 ~]$ kubectl get nodes NAME STATUS ROLES AGE VERSION 192.168.100.31 Ready controlplane,etcd,worker 3m v1.11.6 192.168.100.32 Ready controlplane,etcd,worker 3m v1.11.6 192.168.100.33 Ready controlplane,etcd,worker 3m v1.11.6 |
由于需要联网下载docker镜像文件,所以需要一段时间才能安装好,10-30分钟左右。
6、检查集群Pod的运行状况
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[rancher@bigman-s1 ~]$ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE ingress-nginx default-http-backend-797c5bc547-z4gj5 1/1 Running 0 3m ingress-nginx nginx-ingress-controller-bvgxm 1/1 Running 0 3m ingress-nginx nginx-ingress-controller-rjrss 1/1 Running 0 3m ingress-nginx nginx-ingress-controller-z5nmf 1/1 Running 0 3m kube-system canal-cwb9g 3/3 Running 0 4m kube-system canal-lnvmt 3/3 Running 0 4m kube-system canal-xfft6 3/3 Running 0 4m kube-system kube-dns-7588d5b5f5-5lql6 3/3 Running 0 4m kube-system kube-dns-autoscaler-5db9bbb766-qlskd 1/1 Running 0 4m kube-system metrics-server-97bc649d5-vx7p7 1/1 Running 0 4m kube-system rke-ingress-controller-deploy-job-ghz5d 0/1 Completed 0 3m kube-system rke-kubedns-addon-deploy-job-snkfq 0/1 Completed 0 4m kube-system rke-metrics-addon-deploy-job-kzlwb 0/1 Completed 0 4m 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
2
|
export TILLER_TAG=v2.12.0 ;
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)。
1
|
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
|
安装证书管理器
1、只有Rancher自动生成的证书和LetsEncrypt颁发的证书才需要cert-manager。如果是你自己的证书,可使用ingress.tls.source=secret参数指定证书,并跳过此步骤。
1
2
3
|
helm install stable/cert-manager \
--name cert-manager \
--namespace kube-system
|
Rancher自动生成证书
默认情况下,Rancher会自动生成CA根证书并使用cert-manager颁发证书以访问Rancher server界面。
唯一的要求是将hostname配置为访问Rancher的域名地址,使用这种SSL证书配置方式需提前安装证书管理器。
1
2
3
4
|
helm install rancher-stable/rancher \
--name rancher \
--namespace cattle-system \
--set hostname=hi.rancher.cn
|
hi.rancher.cn
就是后面访问rancher的域名,需要在/etc/hosts文件中添加关联(所有主机):
vi /etc/hosts
1
|
192.168.100.22 hi.rancher.cn
|
由于我们通过hosts文件来添加映射,所以需要为Agent Pod添加主机别名(/etc/hosts):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
kubectl -n cattle-system patch deployments cattle-cluster-agent --patch '{
"spec": {
"template": {
"spec": {
"hostAliases": [
{
"hostnames":
[
"hi.rancher.cn"
],
"ip": "192.168.100.22"
}
]
}
}
}
}'
|
这一步如果马上执行,可能会报错:Error from server (NotFound): deployments.extensions "cattle-cluster-agent" not found
,这个deployment是上一步install时创建的,比较慢,耐心等待一下,这个时候也可以先跳过这里,去到后边,简单配置一下,访问一下rancher的界面。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
kubectl -n cattle-system patch daemonsets cattle-node-agent --patch '{
"spec": {
"template": {
"spec": {
"hostAliases": [
{
"hostnames":
[
"hi.rancher.cn"
],
"ip": "192.168.100.22"
}
]
}
}
}
}'
|
登录rancher管理端
1、需要在/etc/hosts文件中添加关联(所有主机):
vi /etc/hosts
1
|
192.168.100.22 hi.rancher.cn
|
2、使用域名登录https://hi.rancher.cn
输入:admin/admin,设置用户密码。
3、登录之后,此时可以看到已经创建好的k8s集群
刚进入,会看到一个问题。
报这个问题的原因就是刚刚创建的cattle-cluster-agent
还没有被创建成功,同样耐心等待即可。这个时候可以随便点点看看先。这个过程与自己的网络有关,这时也可以在node1主机上,通过如下命令进行一个监控。
在我这里,等了十分钟左右,才开始正式的部署。这个时候,可以返回到上边,将那两条命令导入进去。
操作之后,然后再看rancher,就不会报连接问题了。
到这里,基本上安装步骤也就完成了,可以随便点点看看界面里边的各项功能什么的。
安装rancher-cli
1、下载rancher-cli工具
1
2
|
wget https://releases.rancher.com/cli2/v2.0.6/rancher-linux-amd64-v2.0.6.tar.gz
tar zxvf rancher-linux-amd64-v2.0.6.tar.gz
|
2、配置变量
1
2
|
mv rancher-v2.0.6/rancher /usr/bin/rancher
rm -rf rancher-v2.0.6/
|
3、测试登录
使用创建好的用户token登录:
1
|
rancher login https://hi.rancher.cn/v3 --token token-jpf2f:sjmptntdn6k7rf9mqz7k7c9w77q6pfxmxmr7fvtdjwswbprpjhzvq8
|
其它帮助
docker xfs type问题
在运行docker info 命令时,如果你的文件系统使用了xfs,那么Docker会检测ftype的值,如果ftype=0,那么会有警告出现。
具体警告如下:
1
2
3
|
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、查看分区信息
1
2
3
4
5
6
7
8
|
[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、重新格式化磁盘(注意备份数据)
1
2
3
4
|
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数据目录
vi /usr/lib/systemd/system/docker.service
1
|
ExecStart=/usr/bin/dockerd --graph /grid0/docker
|
4、修改docker storage-driver驱动
1
2
3
4
5
6
7
|
{
"registry-mirrors": ["https://39r65dar.mirror.aliyuncs.com"],
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
|
5、重启docker
1
2
3
4
5
|
systemctl disable docker
systemctl enable docker
systemctl daemon-reload
systemctl restart docker
docker info
|
docker本地仓库
1、启动本地仓库服务:
1
|
docker run -d -p 5000:5000 --restart=always --name registry registry:2
|
2、修改配置
vi /etc/docker/daemon.json
1
2
3
4
5
6
7
8
|
{
"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"]
}
|
参考资料:
http://www.eryajf.net/2723.html
http://www.eryajf.net/category/%E6%9C%AF%E4%B8%9A%E4%B8%93%E6%94%BB/%E4%BA%91%E8%AE%A1%E7%AE%97/rancher