K8S是一个便携的,可扩展的,开源平台,利用声明式的配置和自动化操作来管理容器化的服务。
K8S主要功能就是做容器编排, 编排是什么? 就是原本就已经存在了某些东西,你利用这些东西进行排列组合之类的操作,来发挥某些价值。上面提到了Docker可以对应用进行打包,但是当容器越来越多的时候,管理难度也会随之增加,而K8S就是一种容器管理工具,方便我们来管理Docker。
下图是部署方案的升级:

可参考:什么是 Docker ?容器对应用程序的好处。
K8S是方便容器管理的,那么K8S有哪些好处呢?
我自己的感觉是K8S在运维和发布上相比于传统的方式简化了很多:

K8S的集群主要有Master节点和Worker节点两种类型,左侧为Master节点,右侧为多个Worker节点。Master节点主要用于暴露API,调度部署,和节点的管理。Worker节点时真正工作的节点,Docker就运行在工作节点上,同时运行一个K8S的代理用于同主节点通信。
集群版本如果只是做实验会比较麻烦,我们可以使用官方提供的minikube安装简化版本的K8S即可。

在minikube配置好本地K8S集群之后,我们就可以利用本地环境来探索K8S的用法了。
Pod
K8S调度的最小单位,在一个pod里面可以有一个或者多个容器。下图为pod,node,与Container的关系:

参考: Hands-on: Kubernetes Pods. My first container

Replication Controller
其实听名字我们大致可以猜到这个概念在K8S中就是控制复制相关的东西,实际上它就是在配置文件中定义了一个期望的场景,即声明某种pod的副本数量在任意时刻都符合某个预期值,然后K8S会根据期望值进行调度Pod。所以RC的定义包含如下部分:
如下为一个RC定义的例子:
apiVersion: v1 kind: ReplicationController metadata: name: nginx spec: replicas: 3 #定义副本数 selector: app: nginx #定义选择的pod label template: metadata: name: nginx labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
讯享网

如果我们想要让pod的数量变为2个的话:

删除RC:

Deployment
Deployment相当于对RC的一次升级,它也是描述自己期望的状态,然后K8S会尽力实现我们想要的状态。Deployment的典型使用场景有以下几个:
讯享网apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.12.2 ports: - containerPort: 80
使用命令创建Deplyment:
.kubectl create -f .labsdeploymentdeployment_nginx.yml

更新与回滚容器的镜像:

ReplicationSet
ReplicaSet(RS)是Replication Controller(RC)的升级版本。ReplicaSet 和 Replication Controller之间的唯一区别是对选择器的支持。
大多数kubectl支持Replication Controller 命令的也支持ReplicaSets。
一般使用Deployment来管理ReplicaSets,很少会单独使用ReplicaSets

Service
在K8S集群中,每个pod都有自己的独立IP地址。
当我们使用RS或者RC的时候,如果对pod做scale的话,可能会杀死一些pod。当使用Deployment进行滚动更新的时候,旧的pod也会被终止,然后创建新的pod,但是这个时候Pod IP地址就会变化了。
但是一般提供给外界的都是一个稳定的IP和端口,来提供服务,那么pod提供的服务如何才能被发现或者及时更新呢?这就是K8S的Service做的事。
Service有三种类型:
首先看下节点的IP

ClusterIP

通过kubectl expose命令创建的服务默认是ClusterIP,其地址如上图,只有K8S集群内部可以访问。
NodePort
在使用Kubectrl创建服务的时候指定service的类型:
kubectl expose deployment nginx-deployment –type=NodePort

从外部访问:

关于LoadBalancer需要外部依赖,这里就不做演示
K8S现在基本上成为互联网公司的标准配备,哪怕没有在线上使用,也会再开发环境做一些研究,作为技术人员很有必要学习一下K8S,希望这篇文章能帮助到大家。
注:
本文独家发布自金蝶云社区

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/179504.html