![图片描述][/images/rke_pic.webp]

前期准备

RKE:Ranchar Kubernetes Engine https://github.com/rancher/rke 由于RKE是由golang编写,所以直接下载对应系统的二进制文件即可 下载地址: https://github.com/rancher/rke/releases

1.建议使用Ubuntu 16.04.3 LTS版本;如果使用CentOS 7,建议7.3以上版本 2.各主机的hostname主机名必须不同! 3.hosts文件设置:/etc/hosts要配置正确,一定要有127.0.0.1 localhost 这一项;hosts文件中包含所有主机节点的IP和名称列表。

Docker

通过Rancher提供的脚本进行安装(以下是最新支持的docker版本)

Docker版本 安装脚本
18.09.2 curl https://releases.rancher.com/install-docker/18.09.2.sh | sh
18.06.2 curl https://releases.rancher.com/install-docker/18.06.2.sh | sh
17.03.2 curl https://releases.rancher.com/install-docker/17.03.2.sh | sh

设置docker用户组

RKE通过SSH tunnel进行安装部署,需要事先建立RKE到各节点的SSH免密登录。如果集群中有3个节点,需要在RKE机器上执行1遍秘钥生成命令ssh-keygen,并将生成侧公钥通过分发命令:ssh-copy-id {user}@{ip}。

在各个节点上创建ssh用户,并将其添加至docker组中:

useradd dockeruser
usermod -aG docker dockeruser 

注意:重启系统以后才能生效,只重启Docker服务是不行的!重启后,docker_user用户也可以直接使用docker run命令。

关闭Selinux

Ubuntu 16.04默认未安装,无需设置。

1)CentOS7下可修改配置文件

vi /etc/sysconfig/selinux

2)设置 SELINUX=disabled,重启后永久关闭。

设置IPV4转发

必须开启!Ubuntu 16.04下默认已启用,无需设置。

1)CentOS7 下可编辑配置文件:

vi /etc/sysctl.conf

2)设置:

net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

3)执行如下命令生效:

sudo sysctl -p

设置防火墙策略

开放集群主机节点之间6443、2379、2380端口,如果是刚开始试用,可以先关闭防火墙;

systemctl stop firewalld

Ubuntu默认未启用UFW防火墙,无需设置。也可手工关闭:sudo ufw disable

禁用Swap

一定要禁用swap,否则kubelet组件无法运行。 1)永久禁用swap 可以直接修改

vi /etc/fstab

文件,注释掉swap项。 2)临时禁用

swapoff -a

启用cgroup

修改配置文件/etc/default/grub,启用cgroup内存限额功能,配置两个参数:

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

注意:要执行sudo update-grub 更新grub,然后重启系统后生效。 CentOS下执行:

grub2-mkconfig -o /boot/grub2/grub.cfg

设置SSH

1)在rke所在主机上创建密钥:

ssh-keygen

2)将所生成的密钥的公钥分发到各个节点:

ssh-copy-id dockeruser@xxx.xxx.xx.xx
...

编写 cluster.yml

可以输入命令rke_drawin-amd64 config(我本机是mac,所以使用drawin-amd64版本),跟着引导完成基础配置 配置完成后将会在当前目录下出现一个 cluster.yml 下面是该配置文件的内容(这里我配置的是包含两个节点的k8s集群,其中一个master,rke很容易支持HA部署,仅仅需要在配置文件中对多个节点指定role.controlplane即可)

nodes:
- address: xxx.xxx.xxx.xxx
  port: "22"
  internal_address: ""
  role:
  - controlplane
  - worker
  - etcd
  hostname_override: master
  user: dockeruser
  docker_socket: /var/run/docker.sock
  labels: {}
- address: xxx.xxx.xxx.xxx
  port: "22"
  internal_address: ""
  role:
  - worker
  hostname_override: node-1
  user: dockeruser
  docker_socket: /var/run/docker.sock
  ssh_key: ""
  ssh_key_path: ""
  ssh_cert: ""
  ssh_cert_path: ""
  labels: {}
services:
  etcd:
    image: ""
    extra_args: {}
    extra_binds: []
    extra_env: []
    external_urls: []
    ca_cert: ""
    cert: ""
    key: ""
    path: ""
    snapshot: null
    retention: ""
    creation: ""
    backup_config: null
  kube-api:
    image: ""
    extra_args: {}
    extra_binds: []
    extra_env: []
    service_cluster_ip_range: 10.43.0.0/16
    service_node_port_range: ""
    pod_security_policy: false
    always_pull_images: false
  kube-controller:
    image: ""
    extra_args: {}
    extra_binds: []
    extra_env: []
    cluster_cidr: 10.42.0.0/16
    service_cluster_ip_range: 10.43.0.0/16
  scheduler:
    image: ""
    extra_args: {}
    extra_binds: []
    extra_env: []
  kubelet:
    image: ""
    extra_args: {}
    extra_binds: []
    extra_env: []
    cluster_domain: cluster.local
    infra_container_image: ""
    cluster_dns_server: 10.43.0.10
    fail_swap_on: false
  kubeproxy:
    image: ""
    extra_args: {}
    extra_binds: []
    extra_env: []
network:
  plugin: flannel
  options: {}
authentication:
  strategy: x509
  sans: []
  webhook: null
addons: ""
addons_include: []
system_images:
  etcd: rancher/coreos-etcd:v3.3.10-rancher1
  alpine: rancher/rke-tools:v0.1.42
  nginx_proxy: rancher/rke-tools:v0.1.42
  cert_downloader: rancher/rke-tools:v0.1.42
  kubernetes_services_sidecar: rancher/rke-tools:v0.1.42
  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.6-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
ssh_key_path: ~/.ssh/id_rsa
ssh_cert_path: ""
ssh_agent_auth: true
authorization:
  mode: rbac
  options: {}
ignore_docker_version: false
kubernetes_version: ""
private_registries: []
ingress:
  provider: ""
  options: {}
  node_selector: {}
  extra_args: {}
cluster_name: ""
cloud_provider:
  name: ""
prefix_path: ""
addon_job_timeout: 0
bastion_host:
  address: ""
  port: ""
  user: ""
  ssh_key: ""
  ssh_key_path: ""
  ssh_cert: ""
  ssh_cert_path: ""
monitoring:
  provider: ""
  options: {}
restore:
  restore: false
  snapshot_name: ""
dns: null

安装Kubernetes

rke_drawin-amd64 up

可以看到脚本开始输入一些日志信息 最终出现

Finished building Kubernetes cluster successfully

则表示集群安装成功。

验证

集群安装成功后,RKE会在当前目录创建一个kube_config_cluster.yml文件,这个文件就是kubeconfig文件

默认情况下,kube配置文件被称为.kube_config_cluster.yml。将这个文件复制到你的本地~/.kube/config,就可以在本地使用kubectl了。

需要注意的是,部署的本地kube配置名称是和集群配置文件相关的。例如,如果您使用名为mycluster.yml的配置文件,则本地kube配置将被命名为.kube_config_mycluster.yml。

export KUBECONFIG=./kube_config_cluster.yml
kubectl get node
NAME     STATUS   ROLES                      AGE     VERSION
master   Ready    controlplane,etcd,worker   6m27s   v1.14.6
node-1   Ready    worker                     6m5s    v1.14.6

看到节点信息表明安装成功

添加或删除节点

RKE支持为角色为worker和controlplane的主机添加或删除节点。 1)添加节点: 要添加其他节点,只需要更新具有其他节点的集群配置文件,并使用相同的文件运行集群配置即可。 2)删除节点: 要删除节点,只需从集群配置文件中的节点列表中删除它们,然后重新运行rke up命令。

高可用

RKE工具是满足高可用的。您可以在集群配置文件中指定多个控制面板主机,RKE将在其上部署主控组件。 默认情况下,kubelets被配置为连接到nginx-proxy服务的地址——127.0.0.1:6443,该代理会向所有主节点发送请求。 要启动HA集群,只需使用controlplane角色指定多个主机,然后正常启动集群即可。

删除集群

RKE支持rke remove命令。该命令执行以下操作: 连接到每个主机并删除部署在其上的Kubernetes服务。 从服务所在的目录中清除每个主机:

  • /etc/kubernetes/ssl
  • /var/lib/etcd
  • /etc/cni
  • /opt/cni 请注意,这个命令是不可逆的,它将彻底摧毁Kubernetes集群。

安装中可能遇到的问题

ssh: handshake failed: ssh: unable to authenticate, attempted methods [publickey none], no supported methods remain

请检查配置文件中配置的用户是否可以使用指定的私钥登录机器