容器就是一个视图隔离、资源可限制、独立文件系统的进程集合。
kubernetes介绍
可以做什么?
通过现代的 Web 服务,用户希望应用程序能够 24/7 全天候使用,开发人员希望每天可以多次发布部署新版本的应用程序。 容器化可以帮助软件包达成这些目标,使应用程序能够以简单快速的方式发布和更新,而无需停机。Kubernetes 帮助您确保这些容器化的应用程序在您想要的时间和地点运行,并帮助应用程序找到它们需要的资源和工具。Kubernetes 是一个可用于生产的开源平台,根据 Google 容器集群方面积累的经验,以及来自社区的最佳实践而设计。
Kubernetes是一个在集群主机间进行自动化部署、扩展和容器操作的提供以容器为中心基础设施的开源平台。
通过Kubernetes,你可以快速有效地响应用户需求:
快速而有预期地部署你的应用
极速地扩展你的应用
无缝铺展新的应用功能
节省资源,优化硬件资源的使用
我们的目标是孕育一个组件和工具的生态系统以资源在公有云和私有云中运行的应用的负担。
Kubernetes特点:
可移植: 支持公有云,私有云,混合云,复合云
可扩展: 模块化,热插拨,可组合
自愈: 自动替换,自动重启,自动复制,自动扩展
Kubernetes 的系统架构
Kubernetes 的系统架构
一个 K8s 集群是由分布式存储(etcd)、服务节点(Minion,etcd 现在称为 Node)和控制节点(Master)构成的。所有的集群状态都保存在 etcd 中,Master 节点上则运行集群的管理控制模块。Node 节点是真正运行应用容器的主机节点,在每个 Minion 节点上都会运行一个 Kubelet 代理,控制该节点上的容器、镜像和存储卷等。
Kubernetes 的架构实现理念
K8s 在实现上述架构时要基于以下架构理念:
只有 API Server 与存储通信,其他模块通过 API Server 访问集群状态。这样第一,是为了保证集群状态访问的安全。第二,是为了隔离集群状态访问的方式和后端存储实现的方式:API Server 是状态访问的方式,不会因为后端存储技术 etcd 的改变而改变。加入以后将 etcd 更换成其他的存储方式,并不会影响依赖依赖 API Server 的其他 K8s 系统模块。
一个工作节点被攻破不能导致整个 K8s 集群被攻破。这是所有分布式系统架构设计中都应该考虑的问题。
考虑网络随时可能断开的情况,没有新配置声明时各模块按照之前的配置声明继续工作。在 K8s 集群中,所有的配置管理操作都声明式而非命令式的,因为声明式操作对于网络故障等分布式系统常见的故障情况更加稳定。
各个模块在内存中缓存自己的相关状态以提高系统性能。
需要监控某个系统状态来做下一步动作的时候,优先考虑观察通知模式,其次再考虑轮询模式,这也是为了提高系统的响应速度
kubernetes核心概念
https://www.zhihu.com/question/37498459
Pod
由一个或多个容器组成的一个单元,一个Pod有一个IP。
Node
就是实体机器或虚拟机,用于部署Pod,Node 为 Kubernetes 提供可用的集群资源用于以保持数据、运行作业、维护工作负载、创建网络路由等。
Label(标签)与 Annotation(注解)
何 Kubernetes 资源都应打上标签以供后续查验;
Annotation 与 Label 非常相似,但通常用于以自由的字符串形式保存不同对象的元数据。
Service Discovery(服务发现)
ReplicaSet(副本集)
DaemonSet(守护进程集)
StatefulSet(有状态集)
Job(任务)
ConfigMap(配置映射)及 Secret(机密配置)
Deployment(部署)
Storage(存储)
kubernetes安装组件
kubernetes的组成
Kubernetes 主控组件(Master) 包含三个进程,都运行在集群中的某个节上,主控组件通常这个节点被称为 master 节点。这些进程包括:kube-apiserver、kube-controller-manager 和 kube-scheduler。
集群中的每个非 master 节点都运行两个进程:
kubelet,和 master 节点进行通信。
kube-proxy,一种网络代理,将 Kubernetes 的网络服务代理到每个节点上。
kubectl
kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署
Deployment
Kubernetes Deployment 检查 Pod 的健康状况,并在 Pod 中的容器终止的情况下重新启动新的容器。Deployment 是管理 Pod 创建和扩展的推荐方法。
kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
kubectl get deployments
kubectl get pods
kubectl get events
kubectl config view
Service
默认情况下,Pod 只能通过 Kubernetes 集群中的内部 IP 地址访问。要使得 hello-node 容器可以从 Kubernetes 虚拟网络的外部访问,您必须将 Pod 暴露为 Kubernetes Service。
kubectl expose deployment hello-node --type=LoadBalancer --port=8080
kubectl get services
minikube service hello-node
学习资料
中文文档:http://docs.kubernetes.org.cn/
教程:https://kuboard.cn/learning/
官方教程:https://kubernetes.io/zh/docs/tutorials/
中文社区:https://www.kubernetes.org.cn/
入门实践教程:https://1byte.io/developer-guide-to-docker-and-kubernetes/
kubernetes在线交互式学习平台:https://www.katacoda.com/courses/kubernetes
架构设计:https://www.infoq.cn/article/kubernetes-and-cloud-native-applications-part01/?utm_source=tuicool&utm_medium=referral
10000台机器怎么玩儿系列:http://qinghua.github.io/kubernetes-in-mesos-1/
从零搭建kubernetes集群:https://www.jianshu.com/p/78a5afd0c597
https://kubernetes.io/zh/
https://www.zhihu.com/question/37498459
Kubernetes概念篇
Kubernetes
Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。
名称 Kubernetes 源于希腊语,意为 “舵手” 或 “飞行员”。Google 在 2014 年开源了 Kubernetes 项目。Kubernetes 建立在 Google 在大规模运行生产工作负载方面拥有十几年的经验的基础上,结合了社区中最好的想法和实践。
部署的时代变迁:
传统时代:硬件->操作系统->APP
虚拟化部署时代:硬件->操作系统->虚拟机->APP
容器部署时代:硬件->操作系统->容器->APP
kubernetes的组成
Kubernetes 主控组件(Master) 包含三个进程,都运行在集群中的某个节上,主控组件通常这个节点被称为 master 节点。这些进程包括:kube-apiserver、kube-controller-manager 和 kube-scheduler。
集群中的每个非 master 节点都运行两个进程:
kubelet,和 master 节点进行通信。
kube-proxy,一种网络代理,将 Kubernetes 的网络服务代理到每个节点上。
kubernetes的对象
Pod、Service、Volumn、Namespace
Controller:Deployment、DaemonSet、StatefulSet、ReplicaSet、Job