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

作者:杨紫熹

原文链接:

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

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

71d3d76321db0dfe997df96362fb1080.png

安装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

71d3d76321db0dfe997df96362fb1080.png

部署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 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重载配置即可。

71d3d76321db0dfe997df96362fb1080.png

总  结

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

3b1994a2d1f6c156ea12fec1507975b4.png

推荐阅读

超长干货丨Kubernetes网络快速入门完全指南

独家!K8S安全成头等大事,2019年K8S漏洞盘点与解读

服务网格数据平面的关键:层层剖析Envoy配置

3b1994a2d1f6c156ea12fec1507975b4.png

Rancher年终招聘啦!北京、上海、深圳、沈阳四地火热招聘中,快来加入我们!

解决方案架构师、测试、Golang工程师等众多岗位等你来投!还有更多岗位详情,戳文看咯!

简历投递地址:chinajobs@rancher.com

54b9e098977543705aa8c9d1efe5c1f6.png3b1994a2d1f6c156ea12fec1507975b4.png

About Rancher Labs

Rancher Labs由CloudStack之父梁胜创建。旗舰产品Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为2018年全球容器管理平台领导厂商,被Gartner评为2017年全球最酷的云基础设施供应商。

目前Rancher在全球拥有超过一亿的下载量,并拥有包括中国人寿、华为、中国平安、兴业银行、民生银行、平安证券、海航科技、厦门航空、上汽集团、海尔、米其林、丰田、本田、中船重工、中联重科、迪斯尼、IBM、Cisco、Nvidia、辉瑞制药、西门子、CCTV、中国联通等全球著名企业在内的共27000家企业客户。

ca29cdb046beabd45110e9b4e2e0c564.png

点击阅读原文,投递简历

↓↓↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux du -sh 脚本,Linux之shell脚本(2)

Linux之shell脚本(2)一、printf命令&#xff1a;printf是一个把从标准输入的字符按照你所要求的格式输出到标准输出即屏幕的命令.在很多时候&#xff0c;我们可能需要将自己的数据给他格式化输出的。1.格式化输出。(print format)2.命令格式&#xff1a;printf打印格式实际内容…

python异常值删除_python数据清洗中,是如何识别和处理异常值的?

异常值处理是pythonshujuqingxi/ stylecolor:#000;font-size:14px;>python数据清洗中重要的步骤&#xff0c;虽然异常值出现频率比较低&#xff0c;但是如果置之不理的话&#xff0c;还是会对实际项目的分析造成偏差&#xff0c;所以今天小编就跟大家分享pythonshujuqingxi/…

啊哈c语言答案1.3,啊哈C语言编程-第2课-让计算机开口说话

为什么会有计算机的出现呢&#xff1f;我们伟大的人类&#xff0c;发明的每一样东西都是为了帮助我们改善生活。计算机同样是用来帮助我们的工具。想一想&#xff0c;假如你现在希望让计算机帮助你做一件事情&#xff0c;你首先需要做什么&#xff1f;是不是要先与计算机进行沟…

用html5做一个简单网页_用新款ws2812灯带做一个简单的窗花

本文转自&#xff1a;DF创客社区-未经许可不可转载原文链接&#xff08;附件请于原文下方下载&#xff09;&#xff1a;用新款ws2812灯带做一个简单的窗花-创意生活论坛-DF创客社区​mc.dfrobot.com.cn作者&#xff1a;屌丝王小明很高兴提前拿到了DF即将上架的新品——ws2812灯…

c语言锁屏密码程序,求一个VB锁屏程序的源文件

满意答案nan67182014.07.08采纳率&#xff1a;53% 等级&#xff1a;12已帮助&#xff1a;8369人我原来写的一个缩屏的程序&#xff0c;后来没用&#xff0c;当时只是为了测试透明窗体的.代码给你参考下。功能差一个禁用任务管理器的功能Private Declare Function GetWindowL…

抗侧力构件弹性位移如何计算_说一说现在很火的装配式建筑怎么计算?

装配整体式剪力墙结构体系&#xff0c;其主要预制构件包括承重墙(预制剪力墙)、非承重墙(外填充墙、内隔墙等)、预制楼梯(预制楼梯梯段&#xff0c;端部伸出连接钢筋&#xff0c;伸入叠合平台板&#xff0c;通过叠合现浇形成整体楼梯)、预制阳台板(根据建筑要求&#xff0c;整体…

微软私有云解决方案_微软发布电信云平台 ,互联网巨头争夺5G网络商机

微软发布电信云平台 &#xff0c;互联网巨头争夺5G网络商机微软公司周一发布了全新的云平台&#xff0c;能够帮助电信运营商更快地构建5G网络&#xff0c;降低成本并向企业客户出售定制服务。这一5G的新平台将在微软云Azure上运行&#xff0c;微软表示使用该平台将降低基础架构…

fanuc机器人编程手册_是谁需要G代码编程机器人?

用G代码编程机器人是一个5&#xff0c;6年前就碰到过的一个概念。当时就有点困惑&#xff0c;不过没有细究为何提出这样的想法。这个问题一直搁置很久也没有想起来主动去了解&#xff0c;去和同行去交流。今天在翻阅西门子自动化产品手册时&#xff0c;看到SINUMERIK产品介绍后…

java各个平台订单动态对接_平台订单丨全国各地最新采购、代加工订单,免费联系对接...

寻求&#xff1a;地铁闸机加工件定制加工需要两种闸机&#xff0c;一种扇门&#xff0c;一种旋转扇门&#xff0c;两必须都按照图纸加工&#xff0c;请仔细审核图纸&#xff0c;欢迎有实力的友商前来洽谈&#xff0c;不符勿扰&#xff0c;谢谢&#xff01;求购&#xff1a;镀锌…

零基础入门c语言免费教程,C语言零基础急速入门免费教程不定期更新

很多粉丝问我陈老师为什么你会教c语言和java语言&#xff1f;因为名字中”陈“字的汉语拼音中“chen””陈“&#xff0c;和“c”语言是同一个首字母“c”&#xff0c;所以我教“c”语言。又因为同学、学生、粉丝、朋友、同事、亲人们叫我杰哥&#xff0c;汉语拼音中的”jie“&…

python单词什么意思_“逐字逐句”是什么意思?语法在Python中意味着什么?

I see the following script snippet from the gensim tutorial page. Whats the syntax of word for word in below Python script? >> texts [[word for word in document.lower().split() if word not in stoplist] >> for document in documents] 解决方案 T…

平台型时间信号强度曲线_哥测的不是BET,是氮气等温吸脱附曲线

平时经常会说去测个BET&#xff0c;看看材料比表面积多大&#xff0c;孔径分布如何&#xff0c;其实我们测试的并不是BET&#xff0c;而是氮气等温吸脱附曲线&#xff0c;测试得到的数据是氮气等温吸脱附曲线&#xff0c;比表面积、孔径分布都是通过公式计算得到的。所以本文旨…

python整数类型在每一台计算机上的取值范围是一样的_人工智能第一章:Python语言基础...

1 Python简介 Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言&#xff0c;最初被设计用于编写自动化脚本(shell)&#xff0c;随着版本的不断更新和语言新功能的添加&#xff0c;越来越多被用于独立的、大型项目的开发。 1.1 起源 Python的作者是著名的…

android震动服务能设置时长么,Android实现手机振动设置的方法

本文实例讲述了Android实现手机振动设置的方法。分享给大家供大家参考。具体如下&#xff1a;main.xml布局文件&#xff1a;android:orientation"vertical" android:layout_width"fill_parent"android:layout_height"fill_parent">android:la…

请概述可视化卷积神经网络的中间输出的基本思想。_最详细的卷积神经网络入门指南!...

编辑&#xff1a;murufengDate&#xff1a;2020-05-15来源&#xff1a;深度学习技术前沿微信公众号链接&#xff1a;干货|最全面的卷积神经网络入门教程卷积神经网络简介卷积网络 (convolutional network)(LeCun, 1989)&#xff0c;也叫做卷积神经网络 (convolutional neural n…

python指定位置写入文件_Python从文件中读取指定的行以及在文件指定位置写入

Python从文件中读取指定的行以及在文件指定位置写入 Python从文件中读取指定的行 如果想根据给出的行号&#xff0c; 从文本文件中读取一行数据&#xff0c; Python标准库linecache模块非常适合这个任务: 测试文件内容 &#xff1a; This is line 1. This is line 2. This is l…

华硕 x86 android,【华硕X79评测】学不会不收费 几步教你安装Android x86-中关村在线...

安装Android x86其实并不困难【中关村在线】华硕X79评测&#xff1a; 话说最近操作系统这个话题非常火爆。也许是借助于Windows 8消费者预览版的光芒&#xff0c;凡是与系统搭边的东西大家好像都喜欢与Windows 8进行比较。介于现在可以使用的系统众多&#xff0c;其中Android x…

springboot用户管理系统_Springboot优秀开源项目

前言 作为一个开发人员来说,快速的熟悉一项技术就是去使用它.伟大的作家鲁迅先生曾说过:看别人视频不如自己敲代码!作为一个菜鸡开发,我平时也致力于收集各种大神的开源项目!接下来就给大家带来我绞尽乳汁为大家搜罗的几个开源的好项目吧!1. 基于springboot Vue 的人事管理系统…

第一次失效_又到审核季,内审员们,咱如何开好第一次会议?

导读作为一名企业的内审员&#xff0c;展开工作将从第一次会议开始&#xff0c;那么如何组织好第一次会议将是十分关键的&#xff0c;今天小编特地跟大家一起分享下首次会议召开的案例&#xff0c;手把手教你怎么成功召开首次会议&#xff1a;首次会议由审核组长主持。01 签到与…

疯狂动物消消乐html5游戏在线玩,疯狂动物消消乐免费

疯狂动物消消乐免费版这是一个移动端休闲益智手游&#xff0c;疯狂动物消消乐免费版主打消除了玩法&#xff0c;在疯狂动物消消乐免费版游戏当中玩家要经过种种形式移动游戏当中元素来到达相同种类消除了成功的目的。游戏介绍疯狂动物消消乐一款休闲类的消除游戏&#xff0c;全…