Rancher Kubernetes Engine (RKE) 的安装!

RKE简介


Rancher Kubernetes Engine(RKE)是一款轻量级Kubernetes安装程序,支持在裸机和虚拟化服务器上​​安装。RKE解决了Kubernetes社区中的一个常见问题:安装复杂性。使用RKE,无论您运行的是哪种操作系统和平台,Kubernetes的安装都会得到简化。

环境准备


机器准备

centOS7 + szss 生成3台虚拟机 (centos7 , public_network)

主机

ip

内存

备注

rke(master)

192.168.10.75

8G

 

node01

192.168.10.84

8G

 

node02

192.168.10.85

8G

 

设置主机名

分别将三台机器设置不同的主机名,具体如下:

master>hostnamectl set-hostname rke 

node01>hostnamectl set-hostname node01

node02>hostnamectl set-hostname node02

配置 hosts

在主rke(master)主机上进行编辑/etc/hosts文件,增加相应主机地址与别名。

> vi /etc/hosts 

在尾部加入

192.168.10.75 rke
192.168.10.84 node01
192.168.10.85 node02

配置ssh key

通过执行ssh-keygen与ssh-copy-id完成生成ssh key以及密钥拷贝,具体代码如下:

>ssh-keygen -t rsa -P ''
或
ssh-keygen -t rsa

一路回车即可,然后拷贝key到各个需要安装的主机上即可,具体如下:

IP=(
192.168.10.75
192.168.10.84
192.168.10.85
)
for x in ${IP[*]}; do ssh-copy-id -i ~/.ssh/id_rsa.pub $x; done;

或者

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

注意:此处也要使用ssh-copy-id user1@本机IP,否则也会报错,另在centos系统下不能使用root用户进行免密设置,本例中使用szss用户(后面安装docker后普通用户需加入到docker组),上述命令需要在普通用户下执行。

测试连接

使用ssh连接各主机看是否可以成功免密码登录,如果成功即可继续后续操作,具体如下:

[szss@rke ~]$ ssh node01
Last login: Tue Sep  4 10:41:12 2018
[szss@node01 ~]$

看到如上信息即表示测试成功。

 

升级系统内核


运行docker的node节点需要升级到4.x内核才支持overlay2驱动,docker 存储驱动很多默认用devicemapper,存在很多问题,但目前最好建议使用overlay2,内核版本小于 3.10.0-693 的不要使用 overlay2 驱动。

建立如下脚本完成内核升级,具体bash代码如下:

创建升级脚本

#!/bin/bash

set -o errexit
set -o nounset
set -o pipefail
echo '============================================================'
echo '====================升级系统内核...========================='
echo '============================================================'
#检查内核
uname -sr
#添加升级内核的第三方库 www.elrepo.org 上有方法
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#列出内核相关包
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#安装最新稳定版
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#查看内核默认启动顺序
yum --enablerepo=elrepo-kernel install kernel-ml -y
#结果显示
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
#设置默认启动的内核,顺序index 分别是 0,1,2,3,每个人机器不一样,看清楚选择自己的index, 执行以下代码选择内核
grub2-set-default 0

echo "update Centos7 success!"

进行授权及执行操作

> chmod +x update-kernel.sh
> sh update-kernel.sh

查看内核默认启动顺序

[root@node01 szss]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
CentOS Linux (4.18.5-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-693.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-91f1148ce9ae4b57ad101b9eaf23eac0) 7 (Core)
#设置默认启动的内核,顺序index 分别是 0,1,2,3,每个人机器不一样,看清楚选择自己的index
>grub2-set-default 0
#重启生效
>reboot

再次检查内核

[root@node01 szss]# uname -a
Linux node01 4.18.5-1.el7.elrepo.x86_64 

注:以上升级内核操作是在root用户下完成的。

 

Docker的安装与配置


本例中docker版本将采用17.03版本,关于docker的详细说明不在本文范畴,故而不做过多说明,直接上安装代码如下:

安装docker

> sudo curl https://releases.rancher.com/install-docker/17.03.sh | sh

将普通用户加入docker组

> sudo usermod -aG docker szss

使用overlay2驱动

> yum install -y yum-plugin-ovl

关闭docker

> systemctl stop docker

配置 docker 的存储驱动

# 如该文件没有,可通过如下命令直接新建
vi /etc/docker/daemon.json
{
"storage-driver": "overlay2"
}

#如果使用 Docker EE 并且版本大于 17.06,还需要一个 storage-opts,这样配置
{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}

启动 docker

> systemctl start docker

查看docker信息

> docker info
##查看Storage Driver类型是不是overlay2,其具体内容如下:
Containers: 10
 Running: 8
 Paused: 0
 Stopped: 2
Images: 6
Server Version: 17.03.2-ce
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins: 
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.18.5-1.el7.elrepo.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 15.38 GiB
Name: node01
ID: ZUUY:Y6C7:VWRM:YEB3:I7X5:PCMB:UK3Z:D4W5:RKGJ:E7OK:ZKHE:MEQJ
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

WARNING: bridge-nf-call-ip6tables is disabled

设置开机启动

> systemctl enable docker

注:此处设置开机启动后reboot时在普通szss用户模式下即可直接使用docker命令,无须再次启动docker服务。

 

RKE的安装


RKE是一种快速,通用的Kubernetes安装程序,可用于在Linux主机上安装Kubernetes。您可以通过几个简单快捷的步骤开始:

  1. 下载RKE二进制文件

  2. 准备Kubernetes集群的节点

  3. 创建群集配置文件

  4. 使用RKE部署Kubernetes

  5. 与Kubernetes集群的交互

下载RKE二进制文件

  1. 在工作站上,打开Web浏览器并导航到RKE版本页面。下载适用于您的操作系统的最新RKE安装程序:

    • Linuxrke_linux-amd64

  2. 使您刚下载的RKE二进制文件成为可执行文件。打开终端,将目录更改为RKE二进制文件的位置,然后运行以下命令之一。

#Linux
$ mv rke_linux-amd64 rke 
$ chmod +x rke
  1. 通过运行以下命令确认RKE现在是可执行的:
#Linux
$ ./rke --version

准备Kubernetes集群的节点

Kubernetes集群组件在Linux发行版上使用Docker启动。可以使用任何所需的Linux,只要可以在其上安装Docker,本例中就是上述准备的master、node01与node02这三台机器。

创建群集配置文件

RKE使用群集配置文件,称为cluster.yml确定群集中的节点以及如何部署Kubernetes。有许多配置选项,可以在设置cluster.yml。在本示例中,将为Kubernetes集群假设最少一个节点。

有两种简单的方法可以创建cluster.yml

  • 使用我们的最小值cluster.yml并根据您将使用的节点更新它。

  • 使用rke config来查询所需的所有信息。

运用 rke config

使用默认方式创建cluster.yml

要创建新的cluster.yml,运行rke config并且此命令会提示您输入构建群集所需的所有信息。查看群集配置选项以了解每个问题的含义。

./rke config

在回答问题列表后,cluster.yml在您启动rke config命令的目录中创建了一个。在之后cluster.yml被创建,您可以编辑该文件进行任何更改。

指定名称创建cluster.yml

$ rke config --name cluster.yml

在回答问题列表后,cluster.yml在您启动rke config命令的目录中创建了一个。

创建一个空 cluster.yml

如果需要空cluster.yml模板,可以使用该--empty标志以生成模板,但模板中没有值。

$ rke config --empty --name cluster.yml

打印 cluster.yml

您可以使用--print标志将生成的配置打印到stdout,而不是创建文件。

$ rke config --print

高可用性

RKE已准备好HA,您可以controlplanecluster.yml文件中指定多个节点。RKE将在所有这些节点上部署主组件,并且kubelet被配置为127.0.0.1:6443默认连接,这是nginx-proxy代理向所有主节点请求的服务的地址。

要创建HA群集,请指定多个具有角色的主机controlplane

使用RKE部署Kubernetes

创建完成后cluster.yml,可以使用简单的命令部署集群。此命令假定该cluster.yml文件与运行该命令的目录位于同一目录中。

#Linux
$ ./rke up
#或者
$ ./rke up --config cluster.yml

本例cluster.yml样例

# If you intened to deploy Kubernetes in an air-gapped environment,
# please consult the documentation on how to configure custom RKE images.
nodes:
- address: 192.168.10.75
  port: "22"
  internal_address: ""
  role:
  - controlplane
  - etcd
  hostname_override: rke
  user: szss 
  docker_socket: /var/run/docker.sock
  ssh_key: ""
  ssh_key_path: /home/szss/.ssh/id_rsa
  labels: {}
- address: "192.168.10.84"
  port: "22"
  role:
  - worker
  hostname_override: node01
  user: szss
  docker_socket: /var/run/docker.sock
  ssh_key: ""
  ssh_key_path: /home/szss/.ssh/id_rsa
  labels: {}
- address: "192.168.10.85"
  port: "22"
  role:
  - worker
  hostname_override: node02
  user: szss
  docker_socket: /var/run/docker.sock
  ssh_key: ""
  ssh_key_path: /home/szss/.ssh/id_rsa
  labels: {}
services:
  etcd:
    image: ""
    extra_args: {}
    extra_binds: []
    extra_env: []
    external_urls: []
    ca_cert: ""
    cert: ""
    key: ""
    path: ""
    snapshot: false
    retention: ""
    creation: ""
  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
  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
  options: {}
  sans: []
addons: ""
addons_include: []
system_images:
  etcd: rancher/coreos-etcd:v3.2.18
  alpine: rancher/rke-tools:v0.1.13
  nginx_proxy: rancher/rke-tools:v0.1.13
  cert_downloader: rancher/rke-tools:v0.1.13
  kubernetes_services_sidecar: rancher/rke-tools:v0.1.13
  kubedns: rancher/k8s-dns-kube-dns-amd64:1.14.10
  dnsmasq: rancher/k8s-dns-dnsmasq-nanny-amd64:1.14.10
  kubedns_sidecar: rancher/k8s-dns-sidecar-amd64:1.14.10
  kubedns_autoscaler: rancher/cluster-proportional-autoscaler-amd64:1.0.0
  kubernetes: rancher/hyperkube:v1.11.1-rancher1
  flannel: rancher/coreos-flannel:v0.9.1
  flannel_cni: rancher/coreos-flannel-cni:v0.2.0
  calico_node: rancher/calico-node:v3.1.1
  calico_cni: rancher/calico-cni:v3.1.1
  calico_controllers: ""
  calico_ctl: rancher/calico-ctl:v2.0.0
  canal_node: rancher/calico-node:v3.1.1
  canal_cni: rancher/calico-cni:v3.1.1
  canal_flannel: rancher/coreos-flannel:v0.9.1
  wave_node: weaveworks/weave-kube:2.1.2
  weave_cni: weaveworks/weave-npc:2.1.2
  pod_infra_container: rancher/pause-amd64:3.1
  ingress: rancher/nginx-ingress-controller:0.16.2-rancher1
  ingress_backend: rancher/nginx-ingress-controller-defaultbackend:1.4
  metrics_server: rancher/metrics-server-amd64:v0.2.1
ssh_key_path: ~/.ssh/id_rsa
ssh_agent_auth: false
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: ""
monitoring:
  provider: ""
  options: {}

在创建Kubernetes集群时会有日志语句。

$ ./rke up --config cluster.yml
INFO [0000]构建Kubernetes集群
INFO [dialer]主机设置隧道[10.0.0.1]
INFO [network]部署端口侦听器容器
信息[网络]在主机[10.0.0.1]上拉图像[alpine:latest]
...
信息[0101]成功建造Kubernetes集群

应该读取最后一行Finished building Kubernetes cluster successfully以指示您的群集已准备好使用。作为Kubernetes创建过程的一部分,kubeconfig已创建并编写了一个文件,该文件kube_config_cluster.yml可用于开始交互您的Kubernetes集群。

与Kubernetes集群的交互

为了开始与Kubernetes集群进行交互,将使用另一个名为的二进制文件kubectl。您需要在本地计算机上安装kubectl。您可以使用kube_config_cluster.yml部署Kubernetes时生成的集群连接到RKE创建的集群。

#通过检查Kubernetes集群的版本来确认kubectl正在运行
$ kubectl --kubeconfig kube_config_cluster.yml版本
客户端版本:version.Info {Major:“1”,Minor:“10”,GitVersion:“v1.10.0”,GitCommit:“fc32d2f3698e36b93322a3465f63a14e9f0eaead”,GitTreeState:“clean”,BuildDate:“2018-03-27T00:13: 02Z“,GoVersion:”go1.9.4“,编译:”gc“,平台:”darwin / amd64“}
服务器版本:version.Info {Major:“1”,Minor:“8+”,GitVersion:“v1.8.9-rancher1”,GitCommit:“68595e18f25e24125244e9966b1e5468a98c1cd4”,GitTreeState:“clean”,BuildDate:“2018-03-13T04 :37:53Z“,GoVersion:”go1.8.3“,编译:”gc“,平台:”linux / amd64“}

报告客户端和服务器版本,表明您具有本地kubectl客户端,并且能够从新构建的群集请求服务器版本。现在,您可以向群集发出任何kubectl命令,例如请求群集中的节点。

$ kubectl --kubeconfig kube_config_cluster.yml获取节点
名称状态改变年龄版本
10.0.0.1就绪控制平面,etcd,worker 35m v1.10.3-rancher1

安装kubectl

下载kubectl安装包

wget https://centos-k8s.oss-cn-hangzhou.aliyuncs.com/rpm/1.8.4/kubectl
chmod a+x kubectl
mv kubectl /usr/bin

RKE会在配置文件所在的目录下部署一个本地文件,该文件中包含kube配置信息以连接到新生成的群集。默认情况下,kube配置文件被称为.kube_config_cluster.yml。将这个文件复制到你的本地~/.kube/config,就可以在本地使用kubectl了。

mkdir .kube
cp kube_config_cluster.yml .kube/config

输入命令:

[szss@test01 ~]$ kubectl get pod -n kube-system
NAME                                   READY     STATUS    RESTARTS   AGE
kube-dns-7588d5b5f5-rhrzw              3/3       Running       0       2m
kube-dns-autoscaler-5db9bbb766-zx4p2   1/1       Running       0       3h
kube-flannel-pfshk                     2/2       Running       0       3h
kube-flannel-s9nlk                     2/2       Running       0       3h
kube-flannel-wx8l5                     2/2       Running       0       3h
metrics-server-97bc649d5-fs8v7         1/1       Running       0       2m

则可以看到所有的pod都是Running状态,如果有ContainerCreating状态,请等待。其他状态的话请查看日志,是否有错误。

结束语

至此完成了最基础的基于RKE的kubernetes的安装工作,后期就可以进行相应的微服务架构的构建了与应用了!

注:如果在安装过程中报错的话,请检查szss用户是否加入了docker组以及rke主机是否设置了免密登录,进行了ssh-copy-id的操作。

 

 

 

 

 

你可能感兴趣的:(Kubernetes)