Rancher 手册
简介
安装
安装准备
- 获取安装包
直接从外网镜像仓库拉取rancher镜像即可,rancher镜像共有两个:
* rancher/server
* rancher/agent
拉取命令如下 ``` # docker pull rancher/server
# docker pull rancher/agent
备注:
server镜像大致在1.05G左右
agent镜像大致在250M左右
```
Rancher 2.x 安装
安装准备 kubectl - k8s命令行工具. rke - Rancher Kubernetes Engine, cli for building Kubernetes clusters. helm - k8s包管理工具
注意: Due to an issue with Helm v2.12.0 and cert-manager, please use Helm v2.12.1 or higher.
软件版本建议建议 RHEL-7.6(X86-64)CentOS- Docker 17.03.x, 18.06.x, 18.09.x Nginx 1.14 1.15
RKE 版本 0.3.1,支持Kubernete版本为: v1.16.2-rancher1-1 (experimental) v1.15.5-rancher1-2 (default) v1.14.8-rancher1-1 v1.13.12-rancher1-1
安装步骤
Create Nodes and Load Balancer
Install Kubernetes with RKE
Initialize Helm (tiller)
Install Rancher
- 创建Nodes和LB
LB RKE将在每个节点上配置入口控制器POD。入口控制器POD绑定到主机网络上的端口TCP/80和TCP/443,并且是向HANCHER服务器的HTTPS流量的入口点。
注意: 不要和应用共享此LB,可能会导致websocket错误
使用Nginx作为LB,nginx.conf配置如下:
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;
}
}
- 准备离线镜像
* rancher-images.txt
* rancher-save-images.sh
* rancher-load-images.sh
* rancher-push-images.sh
- 安装kubectl
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg \
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubectl
配置kubectl 使用RKE创建Kubernetes集群时,RKE会在本地目录中创建一个包含认证信息的配置文件kube_config_rancher-cluster.yml,以使用kubectl或helm等工具连接到新集群。 您可以将此文件复制到$HOME/.kube/config或者如果您正在使用多个Kubernetes集群,请将KUBECONFIG环境变量设置为路径kube_config_rancher-cluster.yml
export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml
检查kubectl 通过获取集群状态来检查kubectl是否已正确配置:
kubectl cluster-info
如果您看到类似于以下内容的消息,则kubectl配置不正确或无法连接到Kubernetes集群:
The connection to the server <server-name:port> was \
refused - did you specify the right host or port?
如果kubectl cluster-info返回url响应但您无法访问集群,要检查它是否配置正确,请使用:
kubectl --kubeconfig=kube_configxxx.yml cluster-info dump
- RKE 安装k8s rancher-cluster.yml文件:
nodes:
- address: 10.10.3.187 # node air gap network IP
internal_address: 172.31.7.22 # node intra-cluster IP
user: rancher
role: [ "controlplane", "etcd", "worker" ]
ssh_key_path: /home/user/.ssh/id_rsa
- address: 10.10.3.254 # node air gap network IP
internal_address: 172.31.13.132 # node intra-cluster IP
user: rancher
role: [ "controlplane", "etcd", "worker" ]
ssh_key_path: /home/user/.ssh/id_rsa
- address: 10.10.3.89 # node air gap network IP
internal_address: 172.31.3.216 # node intra-cluster IP
user: rancher
role: [ "controlplane", "etcd", "worker" ]
ssh_key_path: /home/user/.ssh/id_rsa
private_registries:
- url: <REGISTRY.YOURDOMAIN.COM:PORT> # private registry url
user: rancher
password: "*********"
is_default: true
services:
etcd:
extra_args:
auto-compaction-retention: 240 #(单位小时)
# 修改空间配额为$((6*1024*1024*1024)),默认2G,最大8G
quota-backend-bytes: '6442450944'
# rke 0.2之前版本
snapshot: true
creation: 6h
retention: 24h
# rke 0.2之后版本 (两段配置二选一)
backup_config:
enabled: true # enables recurring etcd snapshots
interval_hours: 6 # time increment between snapshots
retention: 60 # time in days before snapshot purge
# Optional S3
s3_backup_config:
access_key: "myaccesskey"
secret_key: "myaccesssecret"
bucket_name: "my-backup-bucket"
endpoint: "s3.eu-west-1.amazonaws.com"
region: "eu-west-1"
备注:RKE配置参数详见:【RKE配置参数】 常规RKE节点选项 Option Required Description address yes 公共域名或IP地址 user yes 可以运行docker命令的用户 role yes 分配给节点的Kubernetes角色列表 internal_address no 内部集群通信的私有域名或IP地址 ssh_key_path no 用于对节点进行身份验证的SSH私钥的路径(默认为~/.ssh/id_rsa)
- 创建k8s集群
rke up --config ./rancher-cluster.yml
完成后,它应显示:Finished building Kubernetes cluster successfully。
RKE应该已经创建了一个文件kube_config_rancher-cluster.yml。这个文件包含kubectl和helm访问K8S的凭据
如果您使用的文件不叫rancher-cluster.yml, 那么这个kube config配置文件将被命名为kube_config_
export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml
通过kubectl测试您的连接,并查看您的所有节点是否处于Ready状态。
kubectl --kubeconfig=kube_configxxx.yml get nodes
检查集群Pod的运行状况
kubectl --kubeconfig=kube_configxxx.yml get pods --all-namespaces
保存kube_config_rancher-cluster.yml和rancher-cluster.yml文件的副本,您将需要这些文件来维护和升级Rancher实例。
安装Rancher
依赖kubectl,因此需要先安装kubectl
初始化Helm
- 配置Helm客户端访问权限 在离线环境中安装有kubectl的主机上执行以下命令
# 指定kubeconfig配置文件
kubeconfig=kube_configxxx.yml
kubectl --kubeconfig=$kubeconfig -n kube-system \
create serviceaccount tiller
kubectl --kubeconfig=$kubeconfig \
create clusterrolebinding tiller \
--clusterrole cluster-admin \
--serviceaccount=kube-system:tiller
- 创建registry secret(可选) Helm初始化的时候会去拉取tiller镜像,如果镜像仓库为私有仓库,则需要配置登录凭证。在离线环境中安装有kubectl的主机上执行以下命令
# 指定kubeconfig配置文件
kubeconfig=kube_configxxx.yml
kubectl --kubeconfig=$kubeconfig -n kube-system \
create secret docker-registry regcred \
--docker-server="reg.example.com" \
--docker-username=<user> \
--docker-password=<password> \
--docker-email=<email>
# 指定kubeconfig配置文件
kubeconfig=kube_configxxx.yml
kubectl --kubeconfig=$kubeconfig -n kube-system \
patch serviceaccount tiller -p '{"imagePullSecrets": [{"name\": "regcred"}]}'
-
安装Helm客户端 在离线环境中安装有kubectl的主机上安装Helm客户端,参考安装Helm客户端了解Helm客户端安装
-
安装Helm Server(Tiller)
helm init在缺省配置下,会去谷歌镜像仓库拉取gcr.io/kubernetes-helm/tiller镜像,并在Kubernetes集群上安装配置Tiller。离线环境下,可通过--tiller-image指定私有镜像仓库镜像。
helm init在缺省配置下,会利用https://kubernetes-charts.storage.googleapis.com作为缺省的stable repository地址,并去更新相关索引文件。
如果您是离线安装Tiller, 如果有内部的chart仓库,可通过--stable-repo-url指定内部chart地址;如果没有内部的chart仓库, 可通过添加--skip-refresh参数禁止Tiller更新索引。
在离线环境中安装有kubectl和Helm客户端的主机上执行以下命令
kubeconfig=xxx.yml
helm_version=`helm version |grep Client | awk -F""\" '{print $2}'`
helm init --kubeconfig=$kubeconfig --skip-refresh \
--service-account tiller \
--tiller-image registry.cn-shanghai.aliyuncs.com/rancher/tiller:${helm_version}
备注: helm_version 操作其实就是显示helm的版本,如果有指定的tiller版本可以直接使用tiller镜像
打包Rancher Charts模板
此步骤需要在能连接互联网的主机上操作,在可访问互联网并安装有Helm客户端的主机上执行以下操作
- 添加Rancher Charts仓库 指定安装的版本(比如: latest or stable),可通过版本选择查看版本说明
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
备注: 此步骤就是向本地repository中增加一个仓库地址
- 获取Rancher Charts离线包 指定安装的版本(比如: latest或stable或者通过--version指定版本),可通过版本选择查看版本说明
helm fetch rancher-stable/rancher --version v2.3.2
备注:
此步骤是从所有可用的仓库中获取指定版本的rancher 的chart
结果
默认在当前目录下生成rancher-vx.x.x.tgz压缩文件,可通过-d指定生成的压缩包路径,比如:helm fetch rancher-stable/rancher --version v2.2.3 -d /home,将会在/home目录下生成rancher-vx.x.x.tgz压缩文件。
离线安装Rancher
将生成的rancher-vx.x.x.tgz文件拷贝到离线环境安装有kubectl和Helm客户端的主机上,解压rancher-vx.x.x.tgz文件获得rancher文件夹。
-
以TCP L4负载均衡器或者ingress作为访问入口
-
使用权威认证证书 将服务证书和CA中间证书链合并名为tls.crt的文件中,将私钥复制到名为tls.key的文件中。使用kubectl创建类型为tls的secrets
# 指定kubeconfig配置文件
kubeconfig=kube_configxxx.yml
kubectl --kubeconfig=$kubeconfig \
create namespace cattle-system
kubectl --kubeconfig=$kubeconfig \
-n cattle-system create secret \
tls tls-rancher-ingress \
--cert=./tls.crt \
--key=./tls.key
注意
必须把服务证书文件和key文件重命名为tls.crt和tls.key。
然后执行以下命令进行rancher安装:
# 指定kubeconfig配置文件
kubeconfig=kube_configxxx.yml
helm --kubeconfig=$kubeconfig install ./rancher \
--name rancher \
--namespace cattle-system \
--set hostname=<修改为自己的域名> \
--set ingress.tls.source=secret
--set rancherImage=<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher:stable
- 使用自己的自签名证书 如果使用的是自己创建的自签名证书,则需要创建证书secret和CA证书secret
# 指定kubeconfig配置文件
kubeconfig=kube_configxxx.yml
kubectl --kubeconfig=$kubeconfig \
create namespace cattle-system
kubectl --kubeconfig=$kubeconfig \
-n cattle-system create \
secret tls tls-rancher-ingress \
--cert=./tls.crt \
--key=./tls.key
kubectl --kubeconfig=$kubeconfig \
-n cattle-system \
create secret generic tls-ca \
--from-file=cacerts.pem
注意
必须保证文件名为cacerts.pem、tls.crt和tls.key。
然后执行以下命令进行rancher安装
# 指定kubeconfig配置文件
kubeconfig=kube_configxxx.yml
helm --kubeconfig=$kubeconfig install ./rancher \
--name rancher \
--namespace cattle-system \
--set hostname=<修改为自己的域名> \
--set ingress.tls.source=secret \
--set privateCA=true \
--set rancherImage=<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher:stable
- 以外部HTTP L7负载均衡器作为访问入口(nginx为例)
使用权威认证证书 使用外部七层负载均衡器作为访问入口,那么将需要把ssl证书配置在L7负载均衡器上面,如果是权威认证证书,rancher侧则无需配置证书。参考nginx配置示例了解L7负载均衡器证书配置方法。
# 指定kubeconfig配置文件
kubeconfig=kube_configxxx.yml
helm --kubeconfig=$kubeconfig install ./rancher \
--name rancher \
--namespace cattle-system \
--set hostname=<修改为自己的域名> \
--set tls=external \
--set rancherImage=<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher:stable
使用自己的自签名证书 使用外部七层负载均衡器作为访问入口,那么将需要把ssl证书配置在L7负载均衡器上面,如果是自己的自签名证书,则需要把CA证书以密文的形式导入rancher。参考nginx配置示例了解L7负载均衡器证书配置方法。
# 指定kubeconfig配置文件
kubeconfig=kube_configxxx.yml
kubectl --kubeconfig=$kubeconfig \
create namespace cattle-system
kubectl --kubeconfig=$kubeconfig \
-n cattle-system create \
secret generic tls-ca \
--from-file=cacerts.pem
注意
必须保证文件名为cacerts.pem。
然后执行以下命令进行rancher安装
# 指定kubeconfig配置文件
kubeconfig=kube_configxxx.yml
helm --kubeconfig=$kubeconfig install ./rancher \
--name rancher \
--namespace cattle-system \
--set hostname=<修改为自己的域名> \
--set privateCA=true \
--set tls=external \
--set rancherImage=<REGISTRY.YOURDOMAIN.COM:PORT>/rancher/rancher:stable
管控
运维命令
FAQ
磁盘驱动报错,怎么办?
-
使用overlay 以及overlay2 存储驱动安装部署rancher都报错,提示inivalid argument,修改为devicemapper后可以正确运行。
-
配置devicemapper驱动时,不建议使用loop,需要使用thinpool,具体参见【Docker 安装手册】
在执行rke up --config rancher-cluster.yml失败,报openssh或者不能使用root用户,怎么办?
-
rhel7.3以及centos-1611应该默认安装的都是openssh-6.6,建议使用centos-1708,因为编译安装升级的openssh通过:ssh -V 显示的是升级后的版本,但是使用nc 10.0.132.176 22 可以看到仍然使用的升级前的协议,导致rke up会失败。
-
centos下不要使用root用户,可以新创建rancher用户,打通所有虚机上rancher用户的免密访问。
在执行rke up --config rancher-cluster.yml失败,报网络策略或者相关错误,怎么办?
- 不要配置internal_address
- 检查各个节点的firewalld是否关闭,并查看selinux是否禁用
- 检查各个节点上的如下端口是否被占用:80 18080 2379 2380等,如果知道各个端口的配置地方,可以根据需要进行指定和修改。第一次部署建议使用默认的端口。
完整的rancher-cluster.yml
nodes:
- address: 1.1.1.1
internal_address:
user: ubuntu
role:
- controlplane
- etcd
ssh_key_path: /home/user/.ssh/id_rsa
port: 2222
- address: 2.2.2.2
internal_address:
user: ubuntu
role:
- worker
ssh_key: |-
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
- address: example.com
internal_address:
user: ubuntu
role:
- worker
hostname_override: node3
internal_address: 192.168.1.6
labels:
app: ingress
app: dns
# 如果设置为true,则可以使用不受支持的Docker版本
ignore_docker_version: false
# 集群等级的SSH私钥(private key)
## 如果节点未配置SSH私钥,RKE将会以此私钥去连接集群节点
ssh_key_path: ~/.ssh/test
# 使用SSH agent来提供SSH私钥
## 需要配置环境变量`SSH_AUTH_SOCK`指向已添加私钥的SSH agent
ssh_agent_auth: false
# 配置docker root目录
docker_root_dir: "/var/lib/docker"
# 私有仓库
## 当设置`is_default: true`后,构建集群时会自动在配置的私有仓库中拉取镜像
## 如果使用的是DockerHub镜像仓库,则可以省略`url`或将其设置为`docker.io`
## 如果使用内部公开仓库,则可以不用设置用户名和密码
private_registries:
- url: registry.com
user: Username
password: password
is_default: true
# 堡垒机
## 如果集群节点需要通过堡垒机跳转,那么需要为RKE配置堡垒机信息
bastion_host:
address: x.x.x.x
user: ubuntu
port: 22
ssh_key_path: /home/user/.ssh/bastion_rsa
# or
# ssh_key: |-
# -----BEGIN RSA PRIVATE KEY-----
#
# -----END RSA PRIVATE KEY-----
# 设置Kubernetes集群名称
cluster_name: mycluster
# 定义kubernetes版本.
## 目前, 版本定义需要与rancher/types defaults map相匹配: https://github.com/rancher/types/blob/master/apis/management.cattle.io/v3/k8s_defaults.go#L14 (后期版本请查看: https://github.com/rancher/kontainer-driver-metadata/blob/master/rke/k8s_rke_system_images.go )
## 如果同时定义了kubernetes_version和system_images中的kubernetes镜像,则system_images配置将优先于kubernetes_version
kubernetes_version: v1.14.3-rancher1
# `system_images`优先级更高,如果没有单独指定`system_images`镜像,则会使用`kubernetes_version`对应的默认镜像版本。
## 默认Tags: https://github.com/rancher/types/blob/master/apis/management.cattle.io/v3/k8s_defaults.go)(Rancher v2.3或者RKE v0.3之后的版本请查看: https://github.com/rancher/kontainer-driver-metadata/blob/master/rke/k8s_rke_system_images.go )
system_images:
etcd: rancher/coreos-etcd:v3.3.10-rancher1
alpine: rancher/rke-tools:v0.1.34
nginx_proxy: rancher/rke-tools:v0.1.34
cert_downloader: rancher/rke-tools:v0.1.34
kubernetes_services_sidecar: rancher/rke-tools:v0.1.34
kubedns: rancher/k8s-dns-kube-dns:1.15.0
dnsmasq: rancher/k8s-dns-dnsmasq-nanny:1.15.0
kubedns_sidecar: rancher/k8s-dns-sidecar:1.15.0
kubedns_autoscaler: rancher/cluster-proportional-autoscaler:1.3.0
coredns: rancher/coredns-coredns:1.3.1
coredns_autoscaler: rancher/cluster-proportional-autoscaler:1.3.0
kubernetes: rancher/hyperkube:v1.14.3-rancher1
flannel: rancher/coreos-flannel:v0.10.0-rancher1
flannel_cni: rancher/flannel-cni:v0.3.0-rancher1
calico_node: rancher/calico-node:v3.4.0
calico_cni: rancher/calico-cni:v3.4.0
calico_controllers: ""
calico_ctl: rancher/calico-ctl:v2.0.0
canal_node: rancher/calico-node:v3.4.0
canal_cni: rancher/calico-cni:v3.4.0
canal_flannel: rancher/coreos-flannel:v0.10.0
weave_node: weaveworks/weave-kube:2.5.0
weave_cni: weaveworks/weave-npc:2.5.0
pod_infra_container: rancher/pause:3.1
ingress: rancher/nginx-ingress-controller:0.21.0-rancher3
ingress_backend: rancher/nginx-ingress-controller-defaultbackend:1.5-rancher1
metrics_server: rancher/metrics-server:v0.3.1
services:
etcd:
# if external etcd is used
# path: /etcdcluster
# external_urls:
# - https://etcd-example.com:2379
# ca_cert: |-
# -----BEGIN CERTIFICATE-----
# xxxxxxxxxx
# -----END CERTIFICATE-----
# cert: |-
# -----BEGIN CERTIFICATE-----
# xxxxxxxxxx
# -----END CERTIFICATE-----
# key: |-
# -----BEGIN PRIVATE KEY-----
# xxxxxxxxxx
# -----END PRIVATE KEY-----
# Rancher 2用户注意事项:如果在创建Rancher Launched Kubernetes时使用配置文件配置集群,则`kube_api`服务名称应仅包含下划线。这仅适用于Rancher v2.0.5和v2.0.6。
# 以下参数仅支持RKE部署的etcd集群
# 开启自动备份
## rke版本大于等于0.2.x或rancher版本大于等于2.2.0时使用
backup_config:
enabled: true
interval_hours: 12
retention: 6
## rke版本小于0.2.x或rancher版本小于2.2.0时使用
##snapshot: true
##creation: 5m0s
##retention: 24h
# 扩展参数
extra_args:
auto-compaction-retention: 240 #(单位小时)
# 修改空间配额为$((6*1024*1024*1024)),默认2G,最大8G
quota-backend-bytes: '6442450944'
kube-api:
# cluster_ip范围
## 这必须与kube-controller中的service_cluster_ip_range匹配
service_cluster_ip_range: 10.43.0.0/16
# NodePort映射的端口范围
service_node_port_range: 30000-32767
# Pod安全策略
pod_security_policy: false
# kubernetes API server扩展参数
## 这些参数将会替换默认值
extra_args:
watch-cache: true
default-watch-cache-size: 1500
# 事件保留时间,默认1小时
event-ttl: 1h0m0s
# 默认值400,设置0为不限制,一般来说,每25~30个Pod有15个并行
max-requests-inflight: 800
# 默认值200,设置0为不限制
max-mutating-requests-inflight: 400
# kubelet操作超时,默认5s
kubelet-timeout: 5s
# 启用审计日志到标准输出
audit-log-path: "-"
# 增加删除workers的数量
delete-collection-workers: 3
# 将日志输出的级别设置为debug模式
v: 4
# Rancher 2用户注意事项:如果在创建Rancher Launched Kubernetes时使用配置文件配置集群,则`kube_controller`服务名称应仅包含下划线。这仅适用于Rancher v2.0.5和v2.0.6。
kube-controller:
# Pods_ip范围
cluster_cidr: 10.42.0.0/16
# cluster_ip范围
## 这必须与kube-api中的service_cluster_ip_range相同
service_cluster_ip_range: 10.43.0.0/16
extra_args:
# 修改每个节点子网大小(cidr掩码长度),默认为24,可用IP为254个;23,可用IP为510个;22,可用IP为1022个;
node-cidr-mask-size: '24'
feature-gates: "TaintBasedEvictions=false"
# 控制器定时与节点通信以检查通信是否正常,周期默认5s
node-monitor-period: '5s'
## 当节点通信失败后,再等一段时间kubernetes判定节点为notready状态。
## 这个时间段必须是kubelet的nodeStatusUpdateFrequency(默认10s)的整数倍,
## 其中N表示允许kubelet同步节点状态的重试次数,默认40s。
node-monitor-grace-period: '20s'
## 再持续通信失败一段时间后,kubernetes判定节点为unhealthy状态,默认1m0s。
node-startup-grace-period: '30s'
## 再持续失联一段时间,kubernetes开始迁移失联节点的Pod,默认5m0s。
pod-eviction-timeout: '1m'
# 默认5. 同时同步的deployment的数量。
concurrent-deployment-syncs: 5
# 默认5. 同时同步的endpoint的数量。
concurrent-endpoint-syncs: 5
# 默认20. 同时同步的垃圾收集器工作器的数量。
concurrent-gc-syncs: 20
# 默认10. 同时同步的命名空间的数量。
concurrent-namespace-syncs: 10
# 默认5. 同时同步的副本集的数量。
concurrent-replicaset-syncs: 5
# 默认5m0s. 同时同步的资源配额数。
concurrent-resource-quota-syncs: 5m0s
# 默认1. 同时同步的服务数。
concurrent-service-syncs: 1
# 默认5. 同时同步的服务帐户令牌数。
concurrent-serviceaccount-token-syncs: 5
# 默认5. 同时同步的复制控制器的数量
concurrent-rc-syncs: 5
# 默认30s. 同步deployment的周期。
deployment-controller-sync-period: 30s
# 默认15s。同步PV和PVC的周期。
pvclaimbinder-sync-period: 15s
# 默认30. 与apiserver通信并发数。
kube-api-burst: 30
# 默认20. 与kubernetes apiserver交谈时使用的QPS,QPS = 并发量 / 平均响应时间
kube-api-qps: 20
kubelet:
# 集群搜索域
cluster_domain: cluster.local
# 内部DNS服务器地址
cluster_dns_server: 10.43.0.10
# 禁用swap
fail_swap_on: false
# 扩展变量
extra_args:
feature-gates: "TaintBasedEvictions=false"
# 指定pause镜像
pod-infra-container-image: 'rancher/pause:3.1'
# 传递给网络插件的MTU值,以覆盖默认值,设置为0(零)则使用默认的1460
network-plugin-mtu: '1500'
# 修改节点最大Pod数量
max-pods: "250"
# 密文和配置映射同步时间,默认1分钟
sync-frequency: '3s'
# Kubelet进程可以打开的文件数(默认1000000),根据节点配置情况调整
max-open-files: '2000000'
# 与apiserver会话时的并发数,默认是10
kube-api-burst: '30'
# 与apiserver会话时的 QPS,默认是5,QPS = 并发量/平均响应时间
kube-api-qps: '15'
# kubelet默认一次拉取一个镜像,设置为false可以同时拉取多个镜像,
# 前提是存储驱动要为overlay2,对应的Dokcer也需要增加下载并发数,参考[docker配置](https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/best-practices/docker/)
serialize-image-pulls: 'false'
# 拉取镜像的最大并发数,registry-burst不能超过registry-qps ,
# 仅当registry-qps大于0(零)时生效,(默认10)。如果registry-qps为0则不限制(默认5)。
registry-burst: '10'
registry-qps: '0'
cgroups-per-qos: 'true'
cgroup-driver: 'cgroupfs'
# 节点资源预留
enforce-node-allocatable: 'pods'
system-reserved: 'cpu=0.25,memory=200Mi'
kube-reserved: 'cpu=0.25,memory=1500Mi'
# POD驱逐,这个参数只支持内存和磁盘。
## 硬驱逐伐值
### 当节点上的可用资源降至保留值以下时,就会触发强制驱逐。强制驱逐会强制kill掉POD,不会等POD自动退出。
eviction-hard: 'memory.available<300Mi,nodefs.available<10%,imagefs.available<15%,nodefs.inodesFree<5%'
## 软驱逐伐值
### 以下四个参数配套使用,当节点上的可用资源少于这个值时但大于硬驱逐伐值时候,会等待eviction-soft-grace-period设置的时长;
### 等待中每10s检查一次,当最后一次检查还触发了软驱逐伐值就会开始驱逐,驱逐不会直接Kill POD,先发送停止信号给POD,然后等待eviction-max-pod-grace-period设置的时长;
### 在eviction-max-pod-grace-period时长之后,如果POD还未退出则发送强制kill POD"
eviction-soft: 'memory.available<500Mi,nodefs.available<50%,imagefs.available<50%,nodefs.inodesFree<10%'
eviction-soft-grace-period: 'memory.available=1m30s'
eviction-max-pod-grace-period: '30'
eviction-pressure-transition-period: '30s'
# 指定kubelet多长时间向master发布一次节点状态。注意: 它必须与kube-controller中的nodeMonitorGracePeriod一起协调工作。(默认 10s)
node-status-update-frequency: 10s
# 设置cAdvisor全局的采集行为的时间间隔,主要通过内核事件来发现新容器的产生。默认1m0s
global-housekeeping-interval: 1m0s
# 每个已发现的容器的数据采集频率。默认10s
housekeeping-interval: 10s
# 所有运行时请求的超时,除了长时间运行的 pull, logs, exec and attach。超时后,kubelet将取消请求,抛出错误,然后重试。(默认2m0s)
runtime-request-timeout: 2m0s
# 指定kubelet计算和缓存所有pod和卷的卷磁盘使用量的间隔。默认为1m0s
volume-stats-agg-period: 1m0s
# 可以选择定义额外的卷绑定到服务
extra_binds:
- "/usr/libexec/kubernetes/kubelet-plugins:/usr/libexec/kubernetes/kubelet-plugins"
- "/etc/iscsi:/etc/iscsi"
- "/sbin/iscsiadm:/sbin/iscsiadm"
kubeproxy:
extra_args:
# 默认使用iptables进行数据转发,如果要启用ipvs,则此处设置为`ipvs`
proxy-mode: ""
# 与kubernetes apiserver通信并发数,默认10;
kube-api-burst: 20
# 与kubernetes apiserver通信时使用QPS,默认值5,QPS = 并发量/平均响应时间
kube-api-qps: 10
extra_binds:
- "/lib/modules:/lib/modules"
scheduler:
extra_args: {}
extra_binds: []
extra_env: []
# 目前,只支持x509验证
## 您可以选择创建额外的SAN(主机名或IP)以添加到API服务器PKI证书。
## 如果要为control plane servers使用负载均衡器,这很有用。
authentication:
strategy: "x509|webhook"
webhook:
config_file: "...."
cache_timeout: 5s
sans:
# 此处配置备用域名或IP,当主域名或者IP无法访问时,可通过备用域名或IP访问
- "192.168.1.100"
- "www.test.com"
# Kubernetes认证模式
## Use `mode: rbac` 启用 RBAC
## Use `mode: none` 禁用 认证
authorization:
mode: rbac
# 如果要设置Kubernetes云提供商,需要指定名称和配置,非云主机则留空;
cloud_provider:
name: aws
# Add-ons是通过kubernetes jobs来部署。 在超时后,RKE将放弃重试获取job状态。以秒为单位。
addon_job_timeout: 30
# 有几个网络插件可以选择:`flannel、canal、calico`,Rancher2默认canal
network:
plugin: canal
options:
flannel_backend_type: "vxlan"
# 目前只支持nginx ingress controller
## 可以设置`provider: none`来禁用ingress controller
ingress:
provider: nginx
node_selector:
app: ingress
# 配置dns上游dns服务器
## 可用rke版本 v0.2.0
dns:
provider: coredns
upstreamnameservers:
- 114.114.114.114
- 1.2.4.8
node_selector:
app: dns
# 安装附加应用
## 所有附加应用都必须指定命名空间
addons: |-
---
apiVersion: v1
kind: Pod
metadata:
name: my-nginx
namespace: default
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
addons_include:
- https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/rook-operator.yml
- https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/rook-cluster.yml
- /path/to/manifest