简介
Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。
使用Kubernetes可以:
- 自动化容器的部署和复制
- 随时扩展或收缩容器规模
- 将容器组织成组,并且提供容器间的负载均衡
- 很容易地升级应用程序容器的新版本
- 提供容器弹性,如果容器失效就替换它,等等…
Minikube
为了方便大家开发和体验Kubernetes,社区提供了可以在本地部署的Minikube
Minikube可以实现一种轻量级的Kubernetes集群,通过在本地计算机上创建虚拟机并部署只包含单个节点的简单集群。
minikube version
minikube start
概念
Pod
有独立的ip
我的理解是节点是固定的,pod可以动态增加
如果一些容器属于强耦合并且需要共享资源(例如 磁盘),那么这些容器应该放到单个 Pod 中一起调度。
工作集群
一个Kubernets工作集群至少有三个节点
Master
集群的调度节点。master协调集群中的所有活动,例如调度应用程序、维护应用程序的所需状态、扩展应用程序和滚动更新
Node
Node 是应用程序实际的工作节点,可以是虚拟机或物理机。每个工作结点都有一个Kubelet,它是管理节点并与Kubenets Master节点进行通信的代理。具体来讲它是Kubernetes Master 和 所有节点之间通信的进程,负责管理机器上运行的 Pod 和容器。容器运行时(例如 Docker, rkt) 负责从镜像仓库中拉取容器镜像,解包容器并运行应用程序。
Deployment
Service
Kubernetes 中的服务是一个抽象对象,它定义了一组逻辑的 Pods 和一个访问它们的策略。
pod之间的发现和路由都是k8s service处理的
服务使用 标签和选择器,匹配一组 Pod
类型
ClusterIP(默认) - 在集群中的内部IP上公开服务。此类型使服务只能从集群中访问。
NodePort —— 使用NAT在群集中每个选定的节点的同一端口上显示该服务。使用 :可以从群集外部访问服务。建立 ClusterIP 的超集。
LoadBalancer —— 在当前云中创建外部负载平衡器(如果支持),并为服务分配固定
的外部IP。建立 NodePort 的超集。
ExternalName —— 使用任意名称显示该服务(由规范中的externalName 指定),本过程通过使用该名称返回 CNAME 记录达成。无须使用代理。这种类型需要 v1.7 或更高版本的 kube-dns
标签
kubectl get pods -l environment=production,tier=frontend
kubectl get pods -l ‘environment in (production),tier in (frontend)’
kubectl get pods -l ‘environment’ //表示有environment标签
,表示AND
滚动更新
将应用程序从一个环境升级到另一个环境 (通过容器镜像更新)
回滚到以前的版本
持续集成和持续交付,实现应用程序零停机
应用伸缩
Scaling 是通过更改 Deployment 中的副本数量实现的
port/nodePort/TargetPort
port (pod上的端口)
集群内部使用的端口 Service IP +Port
nodePort (对外端口)
k8s集群提供给外部客户端访问service使用的端口,一般是主机IP:nodePort就可以访问到该服务
TargetPort (对内端口)
pod中容器的暴露的端口,例如docker expose的端口 Service IP+Port
从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器。
service的CLUSTER IP,其实就是一个VIP
nodePort的工作原理与clusterIP大致相同,是发送到node上指定端口的数据,通过iptables重定向到kube-proxy对应的端口上。然后由kube-proxy进一步把数据发送到其中的一个pod上。
helm
https://medium.com/@evenchange4/%E4%BA%94%E5%88%86%E9%90%98-kubernetes-%E6%9C%89%E6%84%9F-e51f093cb10b
http://dockone.io/article/932
命令
|
|