k8s ubuntu cni_手把手教你使用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来做演示说明。
下载rke_linux_amd64
chmod +x rke_linux_amd64赋予可执行权限
改名为rke,mv rke_linux_amd64 rke
放入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即可。
可能会出现的错误:
etcd健康检查不通过,出现证书错误的情况,这个报错一般是因为时间不同步导致的。
无法访问到node,这个报错一般是因为地址配置出错
Failed to set up SSH tunneling for host,这个报错一般是使用了root用户或者docker sock配置错误
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 tillerkubectl --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的便捷吧。
推荐阅读
超长干货丨Kubernetes网络快速入门完全指南
独家!K8S安全成头等大事,2019年K8S漏洞盘点与解读
服务网格数据平面的关键:层层剖析Envoy配置
Rancher年终招聘啦!北京、上海、深圳、沈阳四地火热招聘中,快来加入我们!
解决方案架构师、测试、Golang工程师等众多岗位等你来投!还有更多岗位详情,戳文看咯!
简历投递地址:chinajobs@rancher.com
About Rancher Labs
Rancher Labs由CloudStack之父梁胜创建。旗舰产品Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为2018年全球容器管理平台领导厂商,被Gartner评为2017年全球最酷的云基础设施供应商。
目前Rancher在全球拥有超过一亿的下载量,并拥有包括中国人寿、华为、中国平安、兴业银行、民生银行、平安证券、海航科技、厦门航空、上汽集团、海尔、米其林、丰田、本田、中船重工、中联重科、迪斯尼、IBM、Cisco、Nvidia、辉瑞制药、西门子、CCTV、中国联通等全球著名企业在内的共27000家企业客户。
点击阅读原文,投递简历
↓↓↓
k8s ubuntu cni_手把手教你使用RKE快速部署K8S集群并部署Rancher HA相关推荐
- 手把手教你搭建Hadoop生态系统伪分布式集群
Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了. 手把手教你搭建Hadoop生态 ...
- 手把手教你用LVS-DR模式搭建Nginx集群
一.环境准备 主机名 主机IP 虚拟VIP 新增虚拟网卡 lvs 192.168.19.133 192.168.19.125 ens33:1 nginx01 192.168.19.136 192.16 ...
- python 时间序列prophet 模型分析_手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码)...
原标题:手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码) 作者:ANKIT CHOUDHARY:翻译:王雨桐:校对:丁楠雅: 本文约3000字,建议阅读12分钟. 本文将通过 ...
- 适合新手:手把手教你用Go快速搭建高性能、可扩展的IM系统(有源码)
本文为开源工程:"github.com/GuoZhaoran/fastIM"的配套文章,原作者:"绘你一世倾城",现为:猎豹移动php开发工程师,感谢原作者的技 ...
- ESP8266 Non-OS SDK 开发之旅 基础篇① 初识 Non-OS SDK,史上超级详细手把手教小白20分钟快速搭建SDK软件开发环境,完成第一个例子Hello World!
文章目录 1.前言 2. SDK概述 2.1 SDK使用流程 2.2 ESP8266 HDK -- 硬件开发工具 2.3 ESP8266 SDK -- 软件开发工具包 2.3.1 Non-OS SDK ...
- 使用Rancher的RKE快速部署Kubernetes集群
简要说明: 本文共涉及3台Ubuntu机器,1台RKE部署机器(192.168.3.161),2台Kubernetes集群机器(3.162和3.163). 先在Windows机器上,将rke_linu ...
- RKE部署Kubernetes集群
安装docker 在各个节点建立自定义账户,使其可以用命令操作docker useradd <user_name> passwd <user_name> usermod -aG ...
- Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务
前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行.当时用的k8s是Docker for desktop 自带的k8s,只要在Docker for desktop中启用 ...
- 在K8s上部署Redis 集群
一.前言 架构原理:每个Master都可以拥有多个Slave.当Master下线后,Redis集群会从多个Slave中选举出一个新的Master作为替代,而旧Master重新上线后变成新Master的 ...
最新文章
- 彻底解决Linux索引节点(inode)占用率高的告警
- 爬虫python的爬取步骤-python爬虫实战之爬取京东商城实例教程
- 从babel实现es6类的继承来深入理解js的原型及继承
- DHCP option 150与option 66的区别
- canvas 在其他画好的上面继续画_详解canvas绘制多张图的排列顺序问题
- spring boot 事务_Redis 事务在 SpringBoot 中的应用
- 天下无贼中经典的句子
- CKEditor 富文本编辑器转PDF
- html5新增标签/删除标签
- ”炮灰“团队自主开发,未参考任何Ftp搜索引擎代码,留个纪念。
- 用cookie实现查看浏览记录
- PRN(20201012):Improved updating of Euclidean distance maps and Voronoi diagrams
- 南邮——计算机图像学——会动的立方体(变换)
- SAP 物料标准价和移动平均价详解
- 应用层加密方_加密应用层数据之前要问的6个问题
- [TC6194]AllWoundUp
- 2022年驾驶员考试推土机司机考试模拟试题卷及答案
- Pandas之Series和DateFrame详解
- 印象笔记文章转到kindle上文字显示小的解决办法
- 毕业论文之转化为三线表格(wps)
热门文章
- 牛客15324 用来作弊的药水
- 计算机操作系统——死锁(产生的必要条件与处理死锁的四个关卡)
- java swing 多个线程,Swing与多线程
- linux下的gpio转串口驱动,X-026-KERNEL-Linux gpio driver的移植之gpio range
- c++ amp vs2017 报错_opencv4教程-1 opencv的安装与调试Windows10+vs2017
- php取不到post数据库,安卓post 数据到php 在写入数据库老是不成功, 数据post不到php...
- 图像处理与图像识别笔记(五)图像增强2
- 组合数学基本工具-- 排列与组合以及简单公式
- Django搭建简易博客
- 3 运行时间太长_10大污水处理预处理系统动态图及运行管理、故障处理