写点什么

手把手教你使用 RKE 快速部署 K8S 集群并部署 Rancher HA

  • 2020-05-18
  • 本文字数:5521 字

    阅读完需:约 18 分钟

手把手教你使用RKE快速部署K8S集群并部署Rancher HA

作者:杨紫熹

原文链接:

https://fs.tn/post/PmaL-uIiQ/


RKE 全称为 Rancher Kubernetes Engine,是一款经过 CNCF 认证的开源 Kubernetes 发行版,可以在 Docker 容器内部运行。它解决了 Kubernetes 社区中最常见的问题——安装十分复杂。借助 RKE,可以简化 Kubernetes 的安装和操作,并且用户可以在任何操作系统和平台上运行它。

安装 RKE

首先需要下载 RKE 这个工具,下载地址为:


https://github.com/rancher/rke/releases


根据自己的平台,下载对应的可执行文件,下面我以 ubuntu 来做演示说明。


  1. 下载 rke_linux_amd64

  2. chmod +x rke_linux_amd64 赋予可执行权限

  3. 改名为 rke,mv rke_linux_amd64 rke

  4. 放入 bin 目录(可选)


以上三步就安装好了 RKE,mac 可以直接用 brew 安装,命令为 brew install rke

部署 Kubernetes 集群

生成集群配置文件

安装好了 RKE 之后,首先生成 RKE 的配置文件。


使用自带命令 rke config,生成 cluster.yml 配置文件


生成之后默认会有一个示例的配置文件。文件中的 controlplane 就是 k8s 中所说的 master。下面来看下这个配置文件(已经经过修改的版本)。


我们以 3 主 3etcd,3work 这种经典 k8s 集群模式来讲解下配置文件改如何写。请仔细阅读,对于部署 k8s 有以下几点需要注意的。


  • 账户不能用 root 账户

  • 所有节点的时间必须同步

  • 使用的非 root 账户要能正常使用 docker

  • 配置建议再 2C4G 以上,推荐是 4C8G 比较合适,磁盘 40G


nodes:  - address: 192.168.1.1    port: "22" # ssh 端口    internal_address: "" # 内网IP,如果是公有云的这种有公私网两个IP的,则address配置为公网IP    role:      - controlplane  # 控制节点校色,等于k8s的master      - etcd    user: ubuntu  # 服务器登陆账户    hostname_override: master-etcd-01    docker_socket: /var/run/docker.sock  # docker sock所在路径,如果是用snap安装的dockers需要自行修改    ssh_key_path: "~/.ssh/id_rsa"  # ssh key的路径,必须是免密登录,不能使用账户密码    labels: {} # 标签说明  - address: 192.168.1.2    port: "22"    internal_address: ""    role:      - controlplane      - etcd    user: ubuntu    hostname_override: master-etcd-02    docker_socket: /var/run/docker.sock    ssh_key_path: ~/.ssh/id_rsa  - address: 192.168.1.3    port: "22"    internal_address: ""    role:      - controlplane      - etcd    user: ubuntu    hostname_override: master-etcd-03    docker_socket: /var/run/docker.sock    ssh_key_path: ~/.ssh/id_rsa  - address: 192.168.1.4    port: "22"    internal_address: ""    role:      - worker    user: ubuntu    hostname_override: worker-1    docker_socket: /var/run/docker.sock    ssh_key_path: ~/.ssh/id_rsa    labels:      app: ingress  # 标记后只有该标记节点会部署ingress  - address: 192.168.1.6    port: "22"    internal_address: ""    role:      - worker    user: ubuntu    hostname_override: worker-2    docker_socket: /var/run/docker.sock    ssh_key_path: ~/.ssh/id_rsa    labels:      app: ingress  - address: 192.168.1.7    port: "22"    internal_address: ""    role:      - worker    user: ubuntu    hostname_override: worker-3    docker_socket: /var/run/docker.sock    ssh_key_path: ~/.ssh/id_rsa    labels:      app: ingressservices:# ETCD相关配置,另外备份是可以备份到s3的,这个配置见官方文档  etcd:    extra_args:      auto-compaction-retention: 240 #(单位小时)      # 修改空间配额为$((6*1024*1024*1024)),默认2G,最大8G      quota-backend-bytes: "6442450944"    backup_config:      enabled: true      interval_hours: 12      retention: 6  kube-api:    service_cluster_ip_range: 10.43.0.0/16    service_node_port_range: "20000-40000"    pod_security_policy: false    always_pull_images: false# 控制器的一些配置,比如节点判断失联后多久开始迁移等  kube-controller:    extra_args:      ## 当节点通信失败后,再等一段时间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"    cluster_cidr: 10.42.0.0/16    service_cluster_ip_range: 10.43.0.0/16# 集群的一些配置,包括资源预留,集群名字,dns等配置  kubelet:    extra_args:      serialize-image-pulls: "false"      registry-burst: "10"      registry-qps: "0"      # # 节点资源预留      # enforce-node-allocatable: 'pods'      # system-reserved: 'cpu=0.5,memory=500Mi'      # kube-reserved: 'cpu=0.5,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'    cluster_domain: cluster.local    infra_container_image: ""    cluster_dns_server: 10.43.0.10    fail_swap_on: false  kubeproxy:    extra_args:      # 默认使用iptables进行数据转发,如果要启用ipvs,则此处设置为`ipvs`      proxy-mode: "ipvs"# 配置集群的CNI网络模型network:  plugin: canal  options:    flannel_backend_type: "vxlan"ssh_key_path: ~/.ssh/id_rsassh_agent_auth: falseauthorization:  mode: rbacignore_docker_version: false# k8s的版本,可以通过rke config --system-images --all 命令列出所有rke支持的版本kubernetes_version: v1.15.4-rancher1-2# 国内使用阿里云的镜像private_registries:  - url: registry.cn-shanghai.aliyuncs.com    user:    password:    is_default: true# 配置ingress,目前RKE支持nginx。ingress:  provider: "nginx"  # 节点选择,和上面node配置结合的  node_selector:    app: ingress  options:    use-forwarded-headers: "true"cluster_name: rancheraddon_job_timeout: 0restore:  restore: false  snapshot_name: ""
复制代码


大部分的配置都注释说明了,基本上需要用到的配置就这些了,更详细的配置需要查阅官方文档。文档链接:


https://docs.rancher.cn/rke/example-yamls.html

开始部署

配置完毕之后,就是开始部署了,rke 的启动非常简单,在配置文件目录使用./rke up 就可以了。


启动完毕之后,等待大约 10 分钟左右,会提示 Finished building Kubernetes cluster successfully


部署的过程中,日志可能会显示 WARN 的提示,这个是没有关系的。只要不出现 ERR 即可。


  • 可能会出现的错误:


  1. etcd 健康检查不通过,出现证书错误的情况,这个报错一般是因为时间不同步导致的。

  2. 无法访问到 node,这个报错一般是因为地址配置出错

  3. Failed to set up SSH tunneling for host,这个报错一般是使用了 root 用户或者 docker sock 配置错误

  4. Failed to dial ssh using address,ssh-key 配置错误


部署成功之后,有三个文件需要特别保存。


  • cluster.yml:RKE 集群配置文件。

  • kube_config_cluster.yml:集群的 Kubeconfig 文件,此文件包含完全访问集群的凭据。

  • cluster.rkestate:Kubernetes 集群状态文件,此文件包含访问集群的重要凭据。


有了以上三个文件,就可以对集群做新增、删除节点、升级集群版本的操作,所以必须要保存好。

部署 Helm

创建 helm 权限


运行下面命令创建好 helm 的权限


kubectl --kubeconfig=kube_config_cluster.yml -n kube-system create serviceaccount tiller
kubectl --kubeconfig=kube_config_cluster.yml create clusterrolebinding tiller \--clusterrole cluster-admin --serviceaccount=kube-system:tiller
复制代码


初始化 helm


这里首先在自己的机子上装好 helm,怎么装这里不再多说了,可以自行百度或者 Google。


安装好了之后,可以直接运行 helm init --kubeconfig=kube_config_cluster.yml 来初始化。但是这里有有一个问题,可能会有镜像拉不下来的情况。所以推荐使用下面的命令来初始化。


helm init --kubeconfig=kube_config_cluster.yml \--service-account tiller --skip-refresh \--tiller-image registry.cn-shanghai.aliyuncs.com/rancher/tiller:v2.14.1
复制代码


里面的镜像是 Rancher 给的镜像地址。当然也可以换成自己的。


运行完命令之后,可以通过 kubectl 看一看 tiller 是否正常启动了。


更新 helm


更新就直接使用 kubectl 的命令,升级镜像版本即可。命令如下(版本号可能和最新的不一样,请不要直接使用)


kubectl --kubeconfig=kube_config_cluster.yml --namespace=kube-system \  set image deployments/tiller-deploy \  tiller=registry.cn-shanghai.aliyuncs.com/rancher/tiller:v3.0.1
复制代码


添加 Rancher 的 charts


添加 Rancher 的 stable 版本 charts


helm repo add rancher-stable \https://releases.rancher.com/server-charts/stable --kubeconfig=kube_config_cluster.yml
复制代码


安装 Rancher


我这里使用的是外部负载均衡的模式,就是在 k8s 之外,还有一个 nginx 作为入口负载均衡,同时 ssl 也截至到这个 nginx。所以下面的配置中,加上了–set tls=external。如果你是直接使用集群作为入口的,则不需要这个参数,需要自己配置 ssl 证书。具体参考官网。


helm --kubeconfig=kube_config_cluster.yml install rancher-stable/rancher \    --name rancher --namespace cattle-system \    --set hostname=rancher.asoco.com.cn \    --set tls=external

复制代码


到此实际上整个集群和 Rancher 都已经部署好了。接下来需要配置外部的 nginx 负载均衡器。


外部负载均衡器 nginx 的配置


nginx 的配置我直接贴出来:


# zip压缩相关的配置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;
# 这里配置为配置了ingress的work节点 upstream rancher { server 192.168.1.5:80; server 192.168.1.6:80; server 192.168.1.7:80;}
map $http_upgrade $connection_upgrade { default Upgrade; '' close;}
server { listen 443 ssl ; #配置域名 server_name rancher..com.cn; #配置证书 ssl_certificate /etc/nginx/rancher.com.cn.sslkey/fullchain.pem; ssl_certificate_key /etc/nginx/rancher.com.cn.sslkey/privkey.pem;
location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto https; 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; # This allows the ability for the execute shell window to remain open for up to 15 minutes. ## Without this parameter, the default is 1 minute and will automatically close. proxy_read_timeout 900s; proxy_buffering off; }}# 配置301重定向server { listen 80; server_name rancher.com.cn; return 301 https://$server_name$request_uri;}
复制代码


将以上配置,新增一个 rancher.conf 配置文件,然后放到/etc/nginx/conf.d/文件夹中,然后 nginx 重载配置即可。

总结

在上面步骤都做完之后,访问域名即可打开 Rancher,并且 Rancher 已经默认接管集群了,开始享有 Rancher 的便捷吧。


2020-05-18 18:075438

评论

发布
暂无评论
发现更多内容

华为云Flexus X实例亮相828!云上管理更高效

平平无奇爱好科技

上云也需捷径,转型更加轻松!828首选华为云Flexus云服务器X实例

平平无奇爱好科技

MES管理系统助力企业车间管理可视化

万界星空科技

数字化转型 mes 可视化大屏 万界星空科技 生产可视化

直播标准权威发布,阿里云RTS获首批卓越级评估认证

阿里云CloudImagine

云计算 音视频 视频云 超低延时直播

高并发不慌!超实用缓存优化小窍门,你值得拥有

巧手打字通

redis 缓存 高并发 缓存架构 缓存加速

上云也有性价比!828华为云Flexus云服务器X实例重磅亮相

平平无奇爱好科技

首款柔性算力云服务器亮相828,华为云Flexus X实例破解上云难题

平平无奇爱好科技

荣誉加冕|数造科技荣获“2024爱分析·数据智能优秀厂商”

数造万象

人工智能 大数据 敏捷开发 智能化 大模型

华为云Flexus云服务器X实例828特惠!赋能企业云上提质增效

平平无奇爱好科技

MatrixOne助力一道创新打造高性能智能制造AIOT系统

MatrixOrigin

数据库 AIOT 智能制造

中国可观测日「成都站」圆满落幕

观测云

可观测性

MatrixOne 助力某电信运营商构建低成本高性能车联网管理系统

MatrixOrigin

数据库 车联网 电信运营商

镜舟科技面对亿级数据分析场景,如何做到金融级放心用?

镜舟科技

大数据 金融 分析型数据库 StarRocks

828云服务器选择多!华为云Flexus X实例让上云更轻松

平平无奇爱好科技

828云服务器再添新选择!华为云Flexus X实例重磅亮相

平平无奇爱好科技

座无虚席!首期流程挖掘实践训练营火爆收官

望繁信科技

数字化转型 流程挖掘 流程资产 流程智能 望繁信科技

低代码开发应用:确保数字化项目成功的5个技巧

不在线第一只蜗牛

低代码 数字化

使用豆包Marscode 创建了一个”天气预报“小应用

TRAE

Python 人工智能 程序员 AI 项目

振动韧性与智能的双翼,让数智金融飞向未来之屿

脑极体

AI

康养为松,智能为鹤:华为全屋智能画出的松鹤长春图

脑极体

AI

云服务器选购就在828!华为云Flexus X实例让上云更轻松

平平无奇爱好科技

抓准中小企业上云关键点!828华为云Flexus X实例强势赋能

平平无奇爱好科技

大模型RAG:基于PgSql的向量检索

程序员架构进阶

大模型 9月日更 9月月更 向量数据库 rag

Yihong,从多元职业到代码之路 | MarsCoders 开发者说

TRAE

Python 人工智能 编程 程序员 AI

大咖领衔,2天AI创业创收训练营即刻启程!不要错过,速来占位!

霍格沃兹测试开发学社

软件项目全套资料、全方案、源码梳理清单

金陵老街

开发文档 软件文档 实施文档 运维文档

828云服务选购好时机!华为云Flexus X实例刷新云上体验

平平无奇爱好科技

正式亮相828!华为云Flexus X实例革新云服务体验

平平无奇爱好科技

手把手教你使用RKE快速部署K8S集群并部署Rancher HA_文化 & 方法_Rancher_InfoQ精选文章