Kubernetes-基于RKE进行Kubernetes的安装部署

简介: 在进行Kubernetes的深入学习之前,首先要做的一件事情就是Kubernetes环境的安装部署。由于Kubernetes本身的复杂性,因此决定安装过程相当较为复杂,在安装过程中需要考虑诸多的因素。

在进行Kubernetes的深入学习之前,首先要做的一件事情就是Kubernetes环境的安装部署。由于Kubernetes本身的复杂性,因此决定安装过程相当较为复杂,在安装过程中需要考虑诸多的因素。在本文中,将使用Kubernetes的轻量级工具——Rancher Kubernetes Engine(RKE)进行Kubernetes的安装部署。RKE是一个用Golang编写的Kubernetes安装程序,相对于其它的工具来说,更加简单易用和上手。


1、环境准备

1.1 操作系统

1)建议使用Ubuntu 16.04.3 LTS版本;如果使用CentOS 7,建议7.3以上版本;

序号

角色

操作系统

IP

主机

1 RKE CentOS7 10.0.32.134 rancher-server
2 etcd CentOS7 10.0.32.175 rancher2-server
3 Master Node CentOS7 10.0.32.175 rachenr2-server
4 Worker Node CentOS7 10.0.32.177 rancher2-node01
5 Worker Node CentOS7 10.0.32.178 rancher2-node02

2)各主机的hostname主机名必须不同!

3)hosts文件设置:/etc/hosts要配置正确,一定要有127.0.0.1 localhost 这一项;hosts文件中包含所有主机节点的IP和名称列表。

1.2 Docker

  • Kubernetes1.8需要Docker 1.12.6、1.13.1、17.03;
  • Kubernetes1.8不支持更高版本的Docker。

1.3 关闭Selinux

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

1)CentOS7下可修改配置文件

#vi /etc/sysconfig/selinux

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

1.4 设置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

1.5 设置防火墙策略

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

#systemctl stop firewalld

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

1.6 禁用Swap

一定要禁用swap,否则kubelet组件无法运行。

1)永久禁用swap

可以直接修改

# vi /etc/fstab

文件,注释掉swap项。

2)临时禁用

# swapoff -a

1.7启用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,然后重启系统后生效。

1.8 设置SSH

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

1)在各个节点(10.0.32.177、10.0.32.178、10.0.32.175)上创建ssh用户,并将其添加至docker组中:

#useradd docker_user #usermod -aG docker docker_user

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

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

#ssh-keygen

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

#ssh-copy-id docker_user@10.0.32.177 #ssh-copy-id docker_user@10.0.32.178 #ssh-copy-id docker_user@10.0.32.175

2、安装Kubernetes

2.1 安装RKE

从Rancher的官方GitHub仓库安装下载RKE。 RKE可以在Linux和MacOS机器上运行。安装完成后,运行以下代码,确保您使用的是最新版本:

./rke --version rke version v0.0.6-dev ./rke --help NAME:  rke - Rancher Kubernetes Engine, Running kubernetes cluster in the cloud USAGE:  rke [global options] command [command options] [arguments...] VERSION:  v0.0.6-dev AUTHOR(S):  Rancher Labs, Inc.  COMMANDS:  up Bring the cluster up  remove Teardown the cluster and clean cluster nodes  version Show cluster Kubernetes version  config, config Setup cluster configuration  help, h Shows a list of commands or help for one command GLOBAL OPTIONS:  --debug, -d Debug logging  --help, -h show help  --version, -v print the version

2.2 集群配置文件

默认情况下,RKE将查找名为cluster.yml的文件,该文件中包含有关将在服务器上运行的远程服务器和服务的信息。cluster.yml文件应该是这样的:

#节点信息 nodes:   #masteretcd节点  - address: 10.0.32.175   user: docker_user  role: [controlplane,etcd] #工作节点  - address: 10.0.32.177   user: docker_user  ssh_key_path: ~/.ssh/id_rsa  role: [worker]  - address: 10.0.32.178  ssh_key_path: ~/.ssh/id_rsa  user: docker_user  role: [worker] #服务信息 services:    etcd:  image: quay.io/coreos/etcd:latest 
 kube-api:  pod_security_policy: false  image: rancher/k8s:v1.8.5-rancher4 
 service_cluster_ip_range: 10.233.0.0/18  kube-controller:  cluster_cidr: 10.233.64.0/18   image: rancher/k8s:v1.8.5-rancher4 
 scheduler:  image: rancher/k8s:v1.8.5-rancher4 
 kubelet:  cluster_domain: cluster.local  cluster_dns_server: 10.233.0.3   infra_container_image: gcr.io/google_containers/pause-amd64:3.0 
 image: rancher/k8s:v1.8.5-rancher4 
 kubeproxy:  image: rancher/k8s:v1.8.5-rancher4
#网络模式 network:   plugin: flannel #镜像 system_images:  flannel: rancher/coreos-flannel:v0.9.1 
 kubedns: rancher/k8s-dns-kube-dns-amd64:1.14.5 
 dnsmasq: rancher/k8s-dns-dnsmasq-nanny-amd64:1.14.5 
 kubedns_sidecar: rancher/k8s-dns-sidecar-amd64:1.14.5 
 kubedns_autoscaler: rancher/cluster-proportional-autoscaler-amd64:1.0.0 
 dashboard: k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3 #认证模式 authentication:   strategy: x509

集群配置文件包含一个节点列表。每个节点至少应包含以下值:

  • 地址 – 服务器的SSH IP
  • 用户 – 连接到服务器的SSH用户
  • 角色 – 主机角色列表:worker,controlplane或etcd

另一节是“服务”,其中包含有关将在远程服务器上部署的Kubernetes组件的信息。

有三种类型的角色可以使用主机:

  • etcd – 这些主机可以用来保存集群的数据。
  • controlplane – 这些主机可以用来存放运行K8s所需的Kubernetes API服务器和其他组件。
  • worker – 这些是您的应用程序可以部署的主机。

2.3 安装Kubernetes

要运行RKE,首先要确保cluster.yml文件在同一个目录下,然后运行如下命令:

 ./rke up

若想指向另一个配置文件,运行如下命令:

 ./rke up --config /tmp/config.yml

输出情况将如下所示:

2.4 安装网络插件

RKE是一个幂等工具,可以运行多次,且每次均产生相同的输出。如下的网络插件它均可以支持部署:

  • Calico
  • Flannel (default)
  • Canal

要使用不同的网络插件,您可以在配置文件中指定:

network: 
 plugin: calico

2.5 附件选项(add-on)

RKE支持在集群引导程序中使用可插拔的插件。用户可以在cluster.yml文件中指定插件的YAML。

RKE在集群启动后会部署插件的YAML。RKE首先会将这个YAML文件作为配置映射上传到Kubernetes集群中,然后运行一个Kubernetes作业来挂载这个配置映射并部署这些插件。

请注意,RKE暂不支持删除插件。插件部署完成后,就不能使用RKE来改变它们了。

要开始使用插件,请使用集群配置文件中的addons:选项,例如:

请注意,我们使用|-,因为插件是一个多行字符串选项,您可以在其中指定多个YAML文件并用“—”将它们分开。

2.7 添加或删除节点

RKE支持为角色为worker和controlplane的主机添加或删除节点。

1)添加节点:

要添加其他节点,只需要更新具有其他节点的集群配置文件,并使用相同的文件运行集群配置即可。

2)删除节点:

要删除节点,只需从集群配置文件中的节点列表中删除它们,然后重新运行rke up命令。

2.8 高可用

RKE工具是满足高可用的。您可以在集群配置文件中指定多个控制面板主机,RKE将在其上部署主控组件。

默认情况下,kubelets被配置为连接到nginx-proxy服务的地址——127.0.0.1:6443,该代理会向所有主节点发送请求。

要启动HA集群,只需使用controlplane角色指定多个主机,然后正常启动集群即可。

3、测试验证

3.1 安装kubectl

1)下载kubectl

此处是在windows下安装,因此下载kubectl.exe,下载地址:https://storage.googleapis.com/kubernetes-release/release/v1.9.0/bin/windows/amd64/kubectl.exe

并将kubectl.exe所在的地址添加至Windows的环境变量的Path中。

其他操作系统下安装kubectl,请参考:https://kubernetes.io/docs/tasks/tools/install-kubectl/#tabset-2

2)配置kubeconfig文件

RKE会在配置文件所在的目录下部署一个本地文件,该文件中包含kube配置信息以连接到新生成的群集。

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

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

3.2 验证

执行kubectl命令,获取nodes的信息:

$ kubectl get nodes

5、附录

5.1 证书管理

RKE默认使用x509身份验证方法来设置Kubernetes组件和用户之间的身份验证。RKE会首先为每个组件和用户组件生成证书。

生成证书后,RKE会将生成的证书部署到/etc/kubernetes/ssl服务器,并保存本地kube配置文件,其中包含主用户证书,在想要删除或升级集群时可以与RKE一起使用。

然后,RKE会将每个服务组件部署为可以相互通信的容器。RKE还会将集群状态保存在Kubernetes中作为配置映射以备后用。

5.2 安装Web UI

5.2.1 安装

1)下kubernetes-dashboard.yaml文件

通过:https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml 地址,能够下载下载kubernetes-dashboard.yaml文件。

2)编辑kubernetes-dashboard.yaml文件

通过编辑工具打开kubernetes-dashboard.yaml,并在此文件中的Service部分下添加type: NodePort和nodePort: 30001,添加位置如下图所示。

3)通过执行如下的命令部署Web UI

# kubectl create -f {path}/kubernetes-dashboard.yaml

5.2.2 访问Web UI

1)在浏览器中输入:https://{Master IP}:30001,此处为https://10.0.32.175:3001,打开页面如下:

2)创建一个管理员用户

创建amind-user.yaml文件,文件内容如下:

apiVersion: v1 kind: ServiceAccount metadata:  name: admin-user  namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBinding  metadata:   name: admin-user  annotations:  rbac.authorization.kubernetes.io/autoupdate: "true" roleRef:  apiGroup: rbac.authorization.k8s.io  kind: ClusterRole  name: cluster-admin subjects: - kind: ServiceAccount  name: admin-user  namespace: kube-system

通过执行如下命令创建admin-user:

#kubectl create -f {path}/admin-user.yaml

3)获取管理员用户的Token

通过执行如下命令获取系统Token信息:

#kubectl describe secret admin-user --namespace=kube-system

4)添加Tokenkubeconfig文件

通过编辑工具打开kubeconfig文件(~/.kube/config),并添加Token。

5)导入kubeconfig文件

在界面中导入kubeconfig文件。

5.3 删除集群

RKE支持rke remove命令。该命令执行以下操作:

连接到每个主机并删除部署在其上的Kubernetes服务。

从服务所在的目录中清除每个主机:

  • /etc/kubernetes/ssl
  • /var/lib/etcd
  • /etc/cni
  • /opt/cni

请注意,这个命令是不可逆的,它将彻底摧毁Kubernetes集群。

本文转自kubernetes中文社区-Kubernetes-基于RKE进行Kubernetes的安装部署

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
19天前
|
Kubernetes 网络协议 应用服务中间件
K8S二进制部署实践-1.15.5
K8S二进制部署实践-1.15.5
31 0
|
2月前
|
Kubernetes 数据安全/隐私保护 Docker
|
2月前
|
运维
计算巢如何使用fluxcd在ack部署helm chart
为支持helm服务运维管理功能,现在改用fluxcd的方式进行helm chart部署,这里计算巢对fluxcd进行部署helm chart的过程进行了封装,封装成了ROS公共模块MODULE::ACS::ComputeNest::FluxOciHelmDeploy,下面将主要介绍下怎么使用这个模块在计算巢中进行Helm Chart的部署。
36 3
|
2月前
|
Kubernetes 容器
使用sealer部署k8s记录
使用sealer部署k8s记录
|
2月前
|
存储 Kubernetes 容器
百度搜索:蓝易云【Kubernetes使用helm部署NFS Provisioner】
现在,你已经成功使用Helm部署了NFS Provisioner,并且可以在Kubernetes中创建使用NFS存储的PersistentVolumeClaim。
42 10
|
21天前
|
Kubernetes 流计算 Perl
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
30 7
|
3天前
|
Kubernetes Linux 网络安全
kubeadm安装k8s
该文档提供了一套在CentOS 7.6上安装Docker和Kubernetes(kubeadm)的详细步骤,包括安装系统必备软件、关闭防火墙和SELinux、禁用swap、开启IP转发、设置内核参数、配置Docker源和加速器、安装指定版本Docker、启动Docker、设置kubelet开机启动、安装kubelet、kubeadm、kubectl、下载和配置Kubernetes镜像、初始化kubeadm、创建kubeconfig文件、获取节点加入集群命令、下载Calico YAML文件以及安装Calico。这些步骤不仅适用于v1.19.14,也适用于更高版本。
38 1
|
3天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
35 17
|
16天前
|
Kubernetes Ubuntu 应用服务中间件
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
69 0
|
21天前
|
Kubernetes 测试技术 API
ChaosBlade常见问题之安装K8S探针心跳检测失败如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
19 0