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/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
真实案例