kubernetes的几个概念
Posted best-farmer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kubernetes的几个概念相关的知识,希望对你有一定的参考价值。
1. rc: 副本控制器,确保在任何时候都运行指定数量的pod副本。换句话说,ReplicationController确保一个pod或一组同构的pod始终处于可用状态。
2. rs:副本集,是rc的升级版常常和deployment一起使用,目的是维护在任何给定时间运行的一组稳定的pods.因此,它通常用于保证指定数量的相同pods的可用性。它跟RC的区别是可以指定selector是一个集合。例如:rc 指定selector中app标签为nginx
controllers/replication.yaml apiVersion: v1 kind: ReplicationController metadata: name: nginx spec: replicas: 3 #副本是3个 selector: app: nginx #通过标签选择接受管理的pod template: #根据此模板生成pod metadata: name: nginx labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
而rs可以指定一个集合:
controllers/frontend.yaml apiVersion: apps/v1 kind: ReplicaSet metadata: name: frontend labels: app: guestbook tier: frontend spec: # modify replicas according to your case replicas: 3 selector: #根据label选择接受管理的pods,这里是一个集合 matchLabels: tier: frontend template: metadata: labels: tier: frontend spec: containers: - name: php-redis image: gcr.io/google_samples/gb-frontend:v3
3. deployment
Deployment为pods和rs提供声明性更新,用户可以在deployment文件中描述需要的状态,deployment将以受控制的速度将实际状态更改为所需状态。您可以定义deployment来创建新的rs,或者删除现有的deployment,并用新的deployment来使用旧的deployment的资源。deployment支持rs不支持的以下操作:
-
回滚:当升级pod镜像或者相关参数的时候发现问题,可以使用回滚操作回滚到上一个稳定的版本或者指定的版本。
-
版本记录: 每一次对Deployment的操作,都能保存下来,给予后续可能的回滚使用。
-
暂停和启动:对于每一次升级,都能够随时暂停和启动。
-
多种升级方案:Recreate:删除所有已存在的pod,重新创建新的; RollingUpdate:滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大不可用pod数量,最小升级间隔时间等等。
一个常见的deployment yaml文件如下
controllers/nginx-deployment.yaml 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.7.9 ports: - containerPort: 80
支持的操作还有rs不支持的
kubectl --record deployment.apps/nginx-deployment set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 kubectl rollout status deployment.v1.apps/nginx-deployment kubectl rollout history deployment.v1.apps/nginx-deployment
4. service
将运行在一组pod上的应用程序公开为网络服务的抽象方法。不需要修改应用程序来使用不熟悉的服务发现机制。Kubernetes为pod提供了它们自己的IP地址和一组pod的一个DNS名称,并且可以在它们之间实现负载平衡。这种方法就是使用kube-proxy. service对应的yaml文件如下:
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376
以上是关于kubernetes的几个概念的主要内容,如果未能解决你的问题,请参考以下文章