Docker容器安装及Kubernetes快速安装
我用的是MacBook Pro,所以内容主要介绍在mac上的docker安装和K8s的安装。这两个服务的安装本身并没有什么值得总结的,这里记录的原因是因为在默认安装的过程中
需要拉取国外的资源。不仅安装效率低,而且失败率非常高。
Docker简介
Docker容器简介,Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用及依赖到指定的容器中,然后发布到Linux服务器上。也许你和曾经的我一样
觉得我把应用直接部署到Linux服务器上也很方便,为什么非要用Docker容器呢?带着这个疑问,我谈下自己对容器的看法和认识。以下是我自己对容器的化部署的理解,不
一定对,但是希望可以对未接触过Docker容器或者想了解的朋友能有所帮助。
为什么使用Docker?
开发人员使用Docker将他们的想法变为现实,通过Docker克服应用程序的复杂性:
- 事情简单化:Docker友好的基于CLI的工作流使各种技能水平的开发人员都可以访问构建,共享和运行容器化应用程序。
- 快速移动:从单个软件包安装即可在几分钟内启动并运行。在本地进行编码和测试,同时确保开发和生产之间的一致性。
- 合作:在您的项目中使用认证的和社区提供的图像。推送到基于云的应用程序注册表并与团队成员进行协作。
以上内容摘抄字Docker官方网站,详情请参考: https://www.docker.com/why-docker
对比Docker容器和VM
- Docker容器包含了环境和程序镜像,可以很方便的在多个服务器间使用;
- Docker容器由于是加载镜像,所以启动几乎是秒级别的。而传统的VM启动一般快也要几分钟;
- 结合容器编排技术,更容易构建基于SOA架构或微服务架构的系统;
- 资源占有率小,虽然VM和Docker都做到了与操作系统进程级别的隔离。但是Docker本身相对VM占用的资源空间缺小的多,就是说相同的硬件资源上我们使用Docker容器可以更方便、更快捷的切割出更多的容器。
- 还不是很理解,可以看下面的系统部署经历的这三几个时代。
Kubernetes简介
Kubernetes又叫K8s。名字的由来是因为全称太长,刚好中间是8个字母所以称为K8S。这个名字相信大家都不陌生,Kubernetes是为让部署容器化的应用简单并且高效。
Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。
Kubernetes 的服务、支持和工具广泛可用。名称 Kubernetes 源于希腊语,意为“舵手”或“飞行员”。Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes
建立在 Google 在大规模运行生产工作负载方面拥有十几年的经验 的基础上,结合了社区中最好的想法和实践。
系统部署经历了这几个时代:
传统部署时代:
部署在屋里服务器上的应用,无法为物流服务器中的应用程序定义资源边界,这会导致资源分配问题。例如,如果在物理服务器上运行多个应用程序,则可能出现由于某个
应用占用的资源过大,导致其他应用的性能下降。
虚拟化部署时代:
为了解决传统部署的问题,引入了虚拟化技术。虚拟化技术允许你在单个物理服务器的CPU上允许多个虚拟机(VM)。虚拟化允许应用在VM之间隔离, 并提供一定程度的安全,
因为是进程级别的隔离所以应用程序的信息不回随意的被其他应用访问。虚拟化技术能够更好地利用物理服务器上的资源,并且因为可轻松地添加或更新应用程序 而可以实现
更好的可伸缩性,降低硬件成本等等。每个VM是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。
容器部署时代:
容器类似于VM,但是可以在应用程序之间共享操作系统(OS)。因此,容器被认为是轻量级的。容器与VM类似,具有自己的文件系统、CPU、内容、进程空间等。由于他们
与基础架构分离,因此可以跨云和OS发行版本进行移植。容器因具有许多优势而变得流行起来。下面列出的是容器的一些好处:
- 敏捷应用程序的创建和部署:与使用 VM 镜像相比,提高了容器镜像创建的简便性和效率。
- 持续开发、集成和部署:通过快速简单的回滚(由于镜像不可变性),支持可靠且频繁的容器镜像构建和部署。
- 关注开发与运维的分离:在构建/发布时而不是在部署时创建应用程序容器镜像, 从而将应用程序与基础架构分离。
- 可观察性不仅可以显示操作系统级别的信息和指标,还可以显示应用程序的运行状况和其他指标信号。
- 跨开发、测试和生产的环境一致性:在便携式计算机上与在云中相同地运行。
- 跨云和操作系统发行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方运行。
- 以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行 OS 到使用逻辑资源在 OS 上运行应用程序。
- 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分, 并且可以动态部署和管理 - 而不是在一台大型单机上整体运行。
- 资源隔离:可预测的应用程序性能。
- 资源利用:高效率和高密度。
这些内容摘抄自Kubernetes官网,之所以摘抄这段内容的主要原因是,他的接受比让我们直接看Docker的介绍更直观。
为什么需要 Kubernetes,它能做什么?
容器为打包和运行应用程序简化了操作流程,在生产环境中,需要管理应用的容器正常运行。如果一个容器发生故障,则需要启动另一个容器。系统自动的处理这些事情,
会优化我们的运维工作。Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移、部署模式等。 例如,Kubernetes
可以轻松管理系统的 Canary 部署。
Kubernetes提供的服务有:
服务发现和负载均衡:
Kubernetes可以使用DNS名称或自己的IP地址公开容器,如果进入容器的流量很大,Kubernetes可以负载均衡并分配网络流程。存储编排:
Kubernetes允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。自动部署和回滚:
你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为期望状态。例如,你可以自动化Kubernetes来为你的部署创建新容器,
删除现有容器并将它们的所有资源用于新容器。自动完成装箱计算:
Kubernetes允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes可以做出更好的决策来管理容器的资源。自我修复:
Kubernetes重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。密钥与配置管理:
Kubernetes允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。
以上内容摘抄字Kubernetes官方文档,仅供大家了解。上面描述的每一个服务都有对应的组件来提供实现,详情请参考:https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/
安装Docker
- 到官网下载对应的Docker Desktop, 连接如:https://www.docker.com/get-started
- 配置Docker镜像,这里推荐使用阿里云的镜像加速器。登录账号后访问, 连接如:https://cr.console.aliyun.com/cn-shenzhen/instances/mirrors
- 为 Kubernetes 配置 CPU 和 内存资源,建议分配 4GB 或更多内存。PS: 请查看系统资源,如果系统资源剩余较少安装和启动容器镜像时会失败!
- 到此,Docker的安装完成。此时,请不要点击Dashboard中的Reset Kubernetes Cluster。
安装Kubernetes及对应的Kubernetes Dashboard
- 感谢阿里云为我们准备了k8s-for-docker-desktop服务,连接如:https://github.com/AliyunContainerService/k8s-for-docker-desktop
按要求执行以下命令,从阿里云镜像服务器上拉去资源
1
./load_images.sh
开启 Kubernetes,然后点击Apply&Restart等待Kubernetes启动。
- 然后按照文档继续操作,就会看到最终如下界面。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40➜ k8s-for-docker-desktop git:(master) kubectl config use-context docker-desktop
Switched to context "docker-desktop".
➜ k8s-for-docker-desktop git:(master) kubectl cluster-info
Kubernetes master is running at https://kubernetes.docker.internal:6443
KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
➜ k8s-for-docker-desktop git:(master)
➜ k8s-for-docker-desktop git:(master)
➜ k8s-for-docker-desktop git:(master) kubectl get nodes
NAME STATUS ROLES AGE VERSION
docker-desktop Ready master 4m1s v1.19.3
➜ k8s-for-docker-desktop git:(master)
➜ k8s-for-docker-desktop git:(master) ls
README.md README_en.md getLatestIstio.ps1 images images.properties kubernetes-dashboard.yaml load_images.ps1 load_images.sh sample
➜ k8s-for-docker-desktop git:(master)
➜ k8s-for-docker-desktop git:(master) kubectl create -f kubernetes-dashboard.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
➜ k8s-for-docker-desktop git:(master)
➜ k8s-for-docker-desktop git:(master) kubectl get pod -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-7b59f7d4df-jssx6 0/1 ContainerCreating 0 18s
kubernetes-dashboard-665f4c5ff-6q699 1/1 Running 0 18s
➜ k8s-for-docker-desktop git:(master)
➜ k8s-for-docker-desktop git:(master)
➜ k8s-for-docker-desktop git:(master) kubectl proxy
Starting to serve on 127.0.0.1:8001
以上,欢迎沟通交流。