rke部署kubernetes

RKE(rancher kubernetes engine)是rancher 发布的一款轻量级的kubernetes部署工具,部署整个集群只需要一个命令和一个配置文件,就可以轻松部署kubernetes集群,还支持kubernetes的ha部署,各类网络plugin。
环境:
rke-node1 172.31.164.57 (部署节点)
rke-node2 172.31.164.58 (master节点、etcd节点)
rke-node3 172.31.164.59 (node节点)

软件版本
rke 0.1.6
docker 17.03

操作系统
ubuntu 16.04

准备工作
配置hosts
172.31.164.57 rke-node1
172.31.164.58 rke-node2
172.31.164.59 rke-node3

配置免密码登录
我们在操作系统是ubuntu 16.04,rke可以直接使用root,centos的话就不行,必须要普通用户,并且属组为docker
ssh-copy-id rke-node1
ssh-copy-id rke-node2
ssh-copy-id rke-node3

关闭selinux
关闭防火墙

配置路由转发
/etc/sysctl.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

安装docker(全部节点)
因为目前rke部署的kubernetes还是1.8版本的,kubernetes 1.8只支持docker1.12.6、1.13.1、17.03

更新软件源

1
apt-get update

安装软件包,允许apt使用https

1
apt-get install apt-transport-https ca-certificates curl software-properties-common

导入docker官方key

1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

添加软件源

1
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

在刷新下

1
apt-get update

安装指定版本docker
列出软件版本

1
apt-cache policy docker-ce

安装docker-17.03

1
apt-get install docker-ce=17.03.0~ce-0~ubuntu-xenial

启动

1
2
systemctl enable docker && systemctl start docker

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

下载
rke_linux-amd64

1
mv rke_linux-amd64.dms rke

cluster.yml的来源有两种,一种是直接从github上下载完整的
下载cluster.yml
rke主要依靠cluster.yml去对集群角色进行划分和配置
下载

1
2
https://github.com/rancher/rke/blob/master/cluster.yml
cluster.yml

修改

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
nodes:
- address: 172.31.164.58
internal_address: ""
role:
- controlplane
- etcd
hostname_override: rke-node2
user: root
docker_socket: /var/run/docker.sock
ssh_key: ""
ssh_key_path: ~/.ssh/id_rsa
labels: {}
- address: 172.31.164.59
internal_address: ""
role:
- worker
hostname_override: rke-node3
user: root
docker_socket: /var/run/docker.sock
ssh_key: ""
ssh_key_path: ~/.ssh/id_rsa
labels: {}
services:
etcd:
image: rancher/etcd:v3.0.17
extra_args: {}
kube-api:
image: rancher/k8s:v1.8.7-rancher1-1
extra_args: {}
service_cluster_ip_range: 10.233.0.0/18
pod_security_policy: false
kube-controller:
image: rancher/k8s:v1.8.7-rancher1-1
extra_args: {}
cluster_cidr: 10.233.64.0/18
service_cluster_ip_range: 10.233.0.0/18
scheduler:
image: rancher/k8s:v1.8.7-rancher1-1
extra_args: {}
kubelet:
image: rancher/k8s:v1.8.7-rancher1-1
extra_args: {}
cluster_domain: cluster.local
infra_container_image: registry.cn-shenzhen.aliyuncs.com/rancher_cn/pause-amd64:3.0
cluster_dns_server: 10.233.0.3
fail_swap_on: false
kubeproxy:
image: rancher/k8s:v1.8.7-rancher1-1
extra_args: {}
network:
plugin: flannel
options: {}
authentication:
strategy: x509
options: {}
addons: ""
system_images:
etcd: ""
alpine: ""
nginx_proxy: ""
cert_downloader: ""
kubernetes_services_sidecar: ""
kubedns: ""
dnsmasq: ""
kubedns_sidecar: ""
kubedns_autoscaler: ""
kubernetes: ""
flannel: ""
flannel_cni: ""
calico_node: ""
calico_cni: ""
calico_controllers: ""
calico_ctl: ""
canal_node: ""
canal_cni: ""
canal_flannel: ""
wave_node: ""
weave_cni: ""
pod_infra_container: ""
ssh_key_path: ~/.ssh/id_rsa
authorization:
mode: rbac
options: {}
ignore_docker_version: false
kubernetes_version: ""
private_registries: []
ingress:
provider: ""
options: {}
node_selector: {}

注意几个点
1、nodes内定义的就是节点的ip、角色、key位置,有以下几种角色
controlplane:也就是kubernetes中的master节点部署kube-api、kube-controller-manger、kube-scheduler组件
etcd:部署etcd,kubernetes集群存储后端数据信息
worker:kubernetes的node节点,承载应用

2、默认是会直接部署ingress的要disable的将ingress的provider弄为node

1
2
3
4
ingress:
provider: none
options: {}
node_selector: {}

还有种办法直接生成,按提示一步步输入。
./rke config #生成名为cluster.yml文件
./rke config –name mycluster.yml #生成指定名字的配置文件

当配置文件和rke命令在一个文件夹下时可以直接使用直接部署命令,否则需要指定yml配置文件
直接部署

1
./rke up

指定配置文件部署

1
rke up --config cluster.yml

部署成功

默认rke是没有安装kubectl的
手动安装kubectl

1
wget https://dl.k8s.io/v1.8.7/kubernetes-client-linux-amd64.tar.gz
1
cp kubernetes/client/bin/kube* /usr/local/bin/
1
chmod a+x /usr/local/bin/kube*
1
export PATH=/usr/local/bin:$PATH

默认在当前目录生成了kubeconfig文件
创建kube文件夹

1
mkdir /root/.kube/

拷贝文件到/root/.kube内

1
cp kube_config_cluster.yml  /root/.kube/config

测试

部署应用

1
kubectl run nginx --image=nginx:1.7.9 --replicas=3

验证

HA部署

rke部署ha的方式非传统的vip的架构,而是通过在每个host上部署个nginx-proxy的container,然后通过这个container做反向代理,本地的kube进程直接连接127.0.0.1:6443

注意事项

1
2
https://github.com/rancher/rke
http://blog.51cto.com/10321203/2071396?utm_source=oschina-app