Kubernetes 环境搭建

入坑第一天,差点没爬起来😂😂😂

1.  Kubernetes是什么

Kubernetes (K8s)是一个用于自动化部署自动扩缩容管理容器化应用程序的开源系统。

关于Kubernetes,说得最多的就是自动容器部署弹性伸缩应用管理

(Automated container deployment , scaling , and management)

Kubernetes将组成应用程序的容器分组为逻辑单元,以便于管理和发现。Kubernetes基于在谷歌上运行生产工作负载的15年经验,结合了来自社区的最佳思想和实践。是工业生产级别的容器编排系统。

2.  Kubernetes特性

  • 服务发现和负载均衡
    • 不需要修改应用程序来使用不熟悉的服务发现机制。Kubernetes为Pods提供它们自己的IP地址和一组Pods的单个DNS名称,并且可以在它们之间实现负载平衡。
  • 自动打包
    • 在不牺牲可用性的情况下,根据容器的资源需求和其他约束条件自动放置容器。混合关键工作负载和最佳工作负载,以提高利用率并节省更多资源
  • 自动修复
    • 重新启动失败的容器,在节点死亡时替换和重新调度容器,杀死那些不响应用户定义的健康检查的容器,并且在它们准备好提供服务之前不会向客户端通知它们。
  • 自动向前滚动和回滚
    • Kubernetes会逐步放开对应用程序或其配置的更改,同时监视应用程序的运行状况,以确保它不会同时杀死所有实例。如果出现问题,Kubernetes将为您回滚更改。利用不断增长的部署解决方案生态系统
  • 秘钥和配置管理
    • 部署和更新秘钥和应用程序配置,而无需重新构建映像,也无需在堆栈配置中公开秘钥
  • 水平扩展
    • 使用简单的命令、UI或基于CPU使用情况,自动扩大或缩小应用程序
  • 可移植性强
    • Kubernetes是开源的,它允许你自由地利用本地、混合或公共云基础设施,让你轻松地将工作负载转移到对你重要的地方

3.  搭建Kubernetes学习环境

初学Kubernetes,建议使用基于docker的解决方案:Kubernetes社区支持的工具,或者在本地机器上配置Kubernetes集群的生态系统中的工具。

如果是生产环境的话,有很多解决方案和供应商可供选择,推荐:阿里云

https://kubernetes.io/docs/setup/

 

3.1.  Minikube

Minikube是一个工具,它使我们能够很容易地在本地运行Kubernetes。Minikube在你的笔记本的虚拟机中运行一个单节点的Kubernetes集群

更多关于Minikube的用法请参见 https://minikube.sigs.k8s.io/

安装Minikube

首先,检查Linux上是否支持虚拟化

grep -E --color 'vmx|svm' /proc/cpuinfo

其次,确保已经安装了kubectl

kubectl version 

具体安装步骤参见 https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-linux 

安装完kubectl以后,接下来请确保已经安装了 Hypervisor 或者 VirtualBox 或者 KVM

注意,Minikube支持 --vm-driver=none选项,这样的话就会安装到主机上,而不是主机上虚拟处理的虚拟机上。 

最后,安装Minikube

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube
sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/

Minikube基本命令

然而,理想很丰满,现实很骨感

当你运行 minikube start的时候,你就会发现从k8s.gcr.io拉取镜像失败

pingk8s.gcr.io

ping k8s.gcr.io发现全部超时

Soga,国内无法访问 k8s.gcr.io 

于是换个思路,从国内的镜像仓库去下载,不要慌,阿里云已经给出了解决方案

https://github.com/AliyunContainerService/minikube

https://yq.aliyun.com/articles/221687 

https://yq.aliyun.com/articles/672675?spm=a2c4e.11153940.0.0.7dd54cec4rOx87 

首先,如果minikube下载都下载不下来的话,可以改成以下地址

curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/v1.5.0/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/

以下摘自云栖社区的一篇博客:

 

于是,在启动的时候指定了一些参数:

minikube start --image-mirror-country cn \
 	--vm-driver=virtualbox \
 	--iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.5.0.iso \
 	--registry-mirror=https://xxxx.mirror.aliyuncs.com

有的朋友可能会疑惑,镜像地址中的xxxx是什么?其实,这个是阿里云的镜像加速器地址,每个阿里云账号都有一个专属的镜像加速器。如图:

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

其实也可以不指定--iso-url选项,不指定的话,默认下载最新的 minikube v1.5.2 版本 

接下来用一个已经存在的镜像来创建一个部署

kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10

这里用到的命令是kubectl,基本命令如下:

部署是可以创建成功,然而当你启动这个服务的时候就会发现怎么都启不起来,正常情况下看到Running状态表示启动成功

吸取前面的经验,这里将 k8s.gcr.io 换成 registry.cn-hangzhou.aliyuncs.com/google_containers

完整的命令是这样的:

kubectl create deployment hello-minikube --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.10

部署服务

# 创建部署
kubectl create deployment hello-minikube --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.10
# 将部署暴露为服务
kubectl expose deployment hello-minikube --type=NodePort --port=8080
# 查看服务
kubectl get pod
# 获取服务URL
minikube service hello-minikube --url
# 删除服务
kubectl delete services hello-minikube
# 删除部署
kubectl delete deployment hello-minikube
# 停止Minikube集群
minikube stop
# 删除Minikube集群
minikube delete
# 查看仪表盘
minikube dashboard

演示

3.2.  集群管理

启动集群

containerd是一个行业标准的容器运行时,它强调简单性、健壮性和可移植性。它可以作为Linux和Windows的守护进程,以管理其主机系统的完整容器生命周期。

# 指定Kubernetes版本
minikube start --kubernetes-version v1.16.0
# 指定VM驱动
minikube start --vm-driver=<driver_name>
# 为了用containerd作为容器运行时
minikube start --network-plugin=cni \
 	--enable-default-cni \
 	--container-runtime=containerd \
 	--bootstrapper=kubeadm

配置集群

为了应用Minikube的一些特性,在minikube start命令的时候可以通过--extra-config选项来指定
格式为: component.key=value,其中component可以是下列之一的字符串

  • kubelet
  • apiserver
  • proxy
  • controller-manager
  • etcd
  • scheduler

例如:

--extra-config=kubelet.MaxPods=5
--extra-config=scheduler.LeaderElection.LeaderElect=true
--extra-config=apiserver.authorization-mode=RBAC

集群交互

minikube dashboard

4.  其它 

Docker中国官方镜像加速 https://registry.docker-cn.com

国内Kubernetes的容器镜像仓库 registry.cn-hangzhou.aliyuncs.com/google_containers

更改docker默认仓库地址

/etc/docker/daemon.json

{
    "registry-mirrors": ["https://registry.docker-cn.com"]   # registry.docker-cn.com是国内的镜像网站
}

如果是Docker Desktop的话,可以这样修改

5.  文档

Kubernetes

https://kubernetes.io/

https://kubernetes.io/docs/setup/learning-environment/minikube/

https://kubernetes.io/docs/tasks/tools/install-minikube/

https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-linux

https://github.com/containerd/containerd

https://github.com/kubernetes/kubernetes

https://www.jianshu.com/p/b10c0d7f7d18

 

阿里云

https://cr.console.aliyun.com/cn-hangzhou/instances/images

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

https://help.aliyun.com/video_detail/54770.html

https://yq.aliyun.com/articles/221687

https://yq.aliyun.com/articles/672675

https://github.com/AliyunContainerService/minikube 

 

真实案例

 

posted @ 2019-11-17 19:49  废物大师兄  阅读(8188)  评论(0编辑  收藏  举报