Kubernetes工作流程

CES*_*SCO 2 docker coreos kubernetes

我一直在使用kubernetes一段时间了.

$ kubectl version                                                                                    
Client Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.0+2831379", GitCommit:"283137936a
498aed572ee22af6774b6fb6e9fd94", GitTreeState:"not a git tree", BuildDate:"2016-07-05T15:40:25Z", GoV
ersion:"go1.6.2", Compiler:"gc", Platform:"darwin/amd64"}                                            
Server Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.0", GitCommit:"5cb86ee022267586db
386f62781338b0483733b3", GitTreeState:"clean", BuildDate:"", GoVersion:"", Compiler:"", Platform:""} 
Run Code Online (Sandbox Code Playgroud)

我通常为每个项目设置一个Ingress,Service和Replication Controller.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: portifolio
  name: portifolio-ingress
spec:
  rules:
  - host: www.cescoferraro.xyz
    http:
      paths:
      - path: /
        backend:
          serviceName: portifolio
          servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
  namespace: portifolio
  name: portifolio
  labels:
    name: portifolio
spec:
  selector:
    name: portifolio
  ports:
  - name: web
    port: 80
    targetPort: 80
    protocol: TCP

---
apiVersion: v1
kind: ReplicationController
metadata:
  namespace: portifolio
  name: portifolio
  labels:
    name: portifolio
spec:
  replicas: 1
  selector:
    name: portifolio
  template:
    metadata:
      namespace: portifolio
      labels:
        name: portifolio
    spec:
      containers:
        - image: cescoferraro/portifolio:latest
          imagePullPolicy: Always
          name: portifolio
          env:
          - name: KUBERNETES
            value: "true"
          - name: BRANCH
            value: "production"
Run Code Online (Sandbox Code Playgroud)

我的"问题"是,为了部署我的应用程序,我通常会这样做:

kubectl -f delete kubernetes.yaml
kubectl -f create kubernetes.yaml
Run Code Online (Sandbox Code Playgroud)

我希望每当我的应用程序启动或关闭时,我都可以使用单个命令进行部署.当我使用相同的图像时滚动更新不起作用(我认为它是我的kubernetes服务器版本上的一个错误).但是,当应用程序从未部署过时,它也无法正常工作.

我读过有关部署的内容,我想知道它对我有什么帮助?

目标 1.如果应用程序是全新的,则部署2.使用docker注册表中的新映像替换现有的pod.

Ant*_*ten 5

我不认为将所有资源保留在单个清单中可以帮助您实现您想要实现的目标,因为您的Service,Ingress和ReplicationController不太可能同时更改.

如果您要做的就是推出新的pod,我建议您使用Deployment替换ReplicationController .清单具有几乎完全相同的语法,因此可以轻松地从标准RC迁移,并且您可以使用单个执行服务器端滚动更新kubectl replace -f manifest.yml.

请注意,即使使用Deployment资源,如果清单中没有任何更改,也无法触发重新部署.kubectl replace什么都不做 因此,您可以例如在清单中增加或更改标记,以便在需要时强制部署(例如revision: 003).