问题描述
在初期学习时,需要部署 Kubernetes 测试集群,用于测试演示与体验,及部分单主集群的升级测试;
“低配集群”,一个 Master 节点,一个 Node 节点,只能用于基础测试与简单演示,无法用于生产环境。在生产环境中,集群高可用,比如容灾、稳定性、故障恢复等等,是必须考虑的问题;
该部分笔记将整理:与 Kubernetes Testing Cluster 搭建有关的杂记,以及常见问题解决方案;
解决方案
kubeadm:创建 Single Master 的集群,用于学习目的;
minikube:快速创建本地集群,聚焦于应用开发及新用户;
K3s:轻量级 Kubernetes 集群;
kind:多用于 Local Development 与 CI 流程;(WIP)
on Google Kubernetes Engine (GKE)
在 GKE 上创建集群:Google Kubernetes Engine
GKE Quick Start: 「Quickstart | Kubernetes Engine Documentation | Google Cloud」
Google Cloud Shell: 「Quickstart | Cloud Shell | Google Cloud」
on Azure Container Service (ACS)
在 ACS 上创建集群。「Azure Container Serivice」
Creating a Cluster with kubicorn
如何在 AWS 上创建 Kubernetes 集群?
可以使用 kubicorn Kubernetes 集群。目前 kubicorn 没有可以执行文件的形式发布,所以下面的操作需要先安装 Go 才能进行;
首先,安装 kubicorn,并确认安装了 Go(.8 或更高版本)。在这里,我们使用 Centos 环境;
# go version go1. 8 linux/amd64
# yum group install”Development Tools”
# yum install ncurses-devel
# go get github. com/kris-nova/kubicorn
安装了 kubicorn profile 创建集群资源,并确认正确地定义了资源:
# cat state/k8scb/cluster.yaml
!!!默认的资源 profile 假设在~/.ssh 中有一对名叫 id_rsa 的私钥和和 id_rsa.pub 的公钥。如果公钥和私钥不在~/.ssh 下,那么可能需要做些改动。请注意以上我们使用的区域是 Oregon,us-west-2,
接下来,你需要准备一个 AWS 身份和访问管理用户(Identity and Access Management,并拥有以下权限 Amazon C2FullAccess 、AutoScalingFullAccess、AmazonVPCFullAccess 如果你没有这样的 iaM 用户,现在就创建一个吧
kubicorn 的最后一项准备工作是将 IAM 的认证设置到环境变量中,如下所示:
export AWS_SECRET_ACCESS_KEY=******
现在根据上述资源的定义以及提供的 AWS 访问权限创建集群:
实际上成功的是绿色的,告诉你一切设置成功。你也可以在浏览器中访问亚马逊的 EC2 控制台来进行确认
现在,按照 kubicorn apply 命令最后一行输出的指示,在集群中运行:
完成上述工作之后,别忘了销毁 Kubernetes 集群了(请注意可能需要花费几分钟的时间):
尽管 kubicorn 还是一个很新的项目,但是它已经发展健全,你还可以在 Azure u Digital Ocean 上使用它创建集群;
因为 kubicorn kubicorn 在配置方面非常灵活,操作非常直观,尤其是如果你有管理员的背景;
kubicornx 文档“在 AWS 中设置 Kubernetes”
http/kubicorn.io documentation/aws-walkthrough html
Lachlan Evensond 在 Digital Ocean 上建立 kubernetes 集群
https://www.youtube.com/watch?v=XpxgSz3dspE
集群环境
目前已经搭建两套测试集群:实验集群(单控制节点);高可用集群;
高可用集群:
系统环境: | CentOS Linux release 7.4.1708 (Core) |
软件版本: | Kubernetes v1.12.1 |
Docker version 18.06.1-ce, build e68fc7a | |
Helm v3.0.0-beta.3 | |
网络信息: | k8s-master[1-3]:10.10.50.91 – 93 |
node[1-6]:10.10.50.81 – 86 | |
VIP:10.10.50.90 |
实验集群(单控制节点):
系统环境: | CentOS Linux release 7.5.1804 (Core) |
软件版本: | Kubernetes v1.14.0 |
Docker version 19.03.2, build 6a30dfc | |
Helm v3.0.0-beta.3 | |
网络信息: | k8s-master x 1 / 172.31.253.28 |
k8s-node01 x 1 / 172.31.253.29 |
解决方案
Local-machine Solutions
本地测试。简单的 K8s 测试、体验环境;
Hosted Solutions
托管解决方案。使用第三方服务,由第三方管理集群;
Turnkey – Cloud Solutions
公有云解决方案。在公有云上创建 Kubernetes 集群。云厂商提供了脚本,只需执行几个命令,这些解决方案会有社区的积极支持;
Turnkey – On-Premises Solutions
允许你使用少量命令在内部安全的云网络上创建 Kubernetes 集群。在内部搭建一个成型的环境;
比如「Agile Stacks Kubernetes Stack」提供自动化功能,可以在公共云或裸机上将 Kubernetes 部署到 VPC 中,并实现定期补丁和更新;
# Custom Solutions
-「Custom Solutions」
定制解决方案为您提供最大的集群自由,但需要最多的专业知识。 这些解决方案包括不同操作系统上的裸机到云提供商;
部署流程
1、初始化环境
1.2、关闭 Swap
1.3、设置 Docker 所需参数
1.4、安装 Docker
1.5、创建安装目录
1.6、安装及配置 CFSSL
1.7、创建认证证书
1.8、ssh-key 认证
3、部署 Flannel 网络
4、部署 master 节点:kube-apiserver/kube-scheduler/kube-controller-manager
将二进制文件解压拷贝到 master 节点
部署 kube-apiserver 组件
创建 kube-apiserver systemd unit 文件
部署 kube-scheduler
部署 kube-controller-manager
5、部署 node 节点: docker/kubelet/kube-proxy
创建 kubelet bootstrap kubeconfig 文件
部署 kube-proxy 组件
集群状态
快速开始
注意:如下内容复制与 Kubernetes Cookbook 书籍;
1.1. Using Kubernetes Without Installation
通过一些在线的互动教程,无需安装 Kubernetes 服务,可以在线进行一些操作;
可以使用 Katacoda 提供的练习环境;
1.2. Installing the Kubernetes CLI, kubectl
安装kubectl的方法可以参考官方「Install and Set Up kubectl」手册;
验证版本:kubectl version
1.3. Installing Minikube to Run a Local Kubernetes Instance
在本地安装 Minikube 就可以进行 Kubernetes 的开发、测试、培训;
它,Minikube,利用本地的虚拟机监视器(VirtualBox,KVM)启动虚拟机,并在单一节点上运行 Kubernetes;
安装参考「Install Minikube」手册;
常用操作:
#!/bin/sh ################################################################################ # 查看版本: ################################################################################ minikube version ################################################################################ # 启动服务: ################################################################################ minikube start # 以指定的驱动启动 minikube start --vm-driver kvm2 # ### 以 kvm 驱动启动 minikube 时,提示:目前不推荐使用 kvm 驱动,该驱动未来会被移除 ### # ! The kvm driver is deprecated and support for it will be removed in a future release. # Please consider switching to the kvm2 driver, which is intended to replace the kvm driver. # See https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#kvm2-driver for more information. # To disable this message, run [minikube config set WantShowDriverDeprecationNotification false] # # ### 使用 kvm2 驱动启动时,提示:需要安装 docker-machine-driver-kvm2 程序 ### # ! Unable to start VM # X Error: [KVM2_NOT_FOUND] new host: Driver "kvm2" not found. Do you have the plugin binary "docker-machine-driver-kvm2" accessible in your PATH? # i Advice: Please install the minikube kvm2 VM driver, or select an alternative --vm-driver # - Documentation: https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#kvm2-driver # # ### 然后启动的时候,它又会去 k8s.gcr.io 上拉取资源 ### # 我跳过了…………因为台浪费时间了,还要再处理网络的问题。因此我不再使用 minikube 进行实验; # 继续进行,如果有遇到使用 minikube 的必要,再回来处理这些问题; ################################################################################ # 启动 minikube 后,就可以使用 kubectl 访问该环境,这是自动的: ################################################################################ kubectl get nodes
1.4. Using Minikube Locally for Development
Minikube 提供了一些实用的命令及相关的文档,比如 start\status\stop\version\ip\ssh\dashborad\docker-env 等等;
!!!Minikube 通过运行 Docker 引擎启动容器。为了本地的 Docker 客户端在本地计算机上访问 Minikube 内部的 Docker 引擎,需要使用 minkube 的 docker-env 设置正确的环境变量;
停止虚拟机:minikube stop
指定资源:minikube start –cpus=4 –memory=4000 –kubernetes-version=v1.7.2
如果要调试 Minikube 内部的虚拟机,先使用 minikube ip 查看 IP 地址,然后使用 minikube ssh 连接。使用 minikube dashboard 命令在默认的浏览器中启动 kubeernetes 的仪表盘;
如果 Minikube 出现问题,可以使用 minikube stop 和 minikube delete 删除当前的 Minikube,然后使用 minikube start 命令重新安装;
1.5. Starting Your First Application on Minikube
在 Minikube 中运行一个程序。启动一个微型博客平台:
# kubectl expose deployments ghost –port=2368 –type=NodePort # 快速创建 Service,提供路由服务,把流量分配到部署时的启动器上;
# kubectl get pods # 查看 POD 的信息
# minikube service ghost # 浏览器访问
1.6. Accessing the Dashboard in Minikube
使用 minikube dashboard 启动仪表盘,右上角+ CREATE 创建应用,单击 DEPLOY 来部署应用,新的页面会看到一些信息;
查看服务信息:kubectl get pods,rs,deployments
查看服务日志:kubectl logs redis-3213426575-4x88v
参考文献
kubernetes/Setup
CentOS 使用二进制部署 Kubernetes 1.13 集群