我在Kubernetes集群上工作,我想在其中运行一个运行cron作业的容器。在同一个集群中,我部署了另外3个运行app-code的容器。在同一集群中添加不同类型的容器需要做哪些更改?
service.yaml:
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: supplier-service
app.kubernetes.io/instance: supplier-service-instance
app.kubernetes.io/version: "1.0.0"
app.kubernetes.io/component: backend
app.kubernetes.io/managed-by: kubectl
annotations:
# Note that the backend talks over HTTP.
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
# TODO: Fill in with the ARN of your certificate.
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: OUR_ARN
# Only run SSL on the port named "https" below.
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
service.beta.kubernetes.io/do-loadbalancer-redirect-http-to-https: "true"
service.beta.kubernetes.io/do-loadbalancer-tls-ports: "443"
name: supplier-service
spec:
selector:
app: supplier-service
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 443deployment.yaml --这个Yaml文件运行应用程序代码
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: supplier-service
app.kubernetes.io/instance: supplier-service-instance
app.kubernetes.io/version: '1.0.0'
app.kubernetes.io/managed-by: kubectl
name: supplier-service-deployment
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 1
selector:
matchLabels:
app: supplier-service
template:
metadata:
labels:
app: supplier-service
spec:
containers:
- image: IMAGE-FROM-ECR/supplier-service:latest
imagePullPolicy: Always
name: supplier-service
ports:
- containerPort: 80
- containerPort: 443
- containerPort: 6379我已经准备好了一个新的DockerFile,它可以在容器中安装cron作业。
deployment-cron.yaml:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: supplier-service
app.kubernetes.io/instance: supplier-service-instance
app.kubernetes.io/version: '1.0.0'
app.kubernetes.io/managed-by: kubectl
name: supplier-service-deployment
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 1
selector:
matchLabels:
app: supplier-service
template:
metadata:
labels:
app: supplier-service
spec:
containers:
- image: AWS-ECR/supplier-service-cron:latest
imagePullPolicy: Always
name: supplier-service
ports:
- containerPort: 80
- containerPort: 443
- containerPort: 6379这是在现有集群中运行单个容器的正确方式吗,或者需要进行任何其他更改吗?谢谢。:-)
发布于 2020-01-30 16:57:37
当您尝试在同一名称空间中部署两个具有相同名称的部署时,上述方法将抛出错误。
下面是你想要做的例子
$ cat deploy1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
deployment1: One
name: nginx
spec:
replicas: 3
selector:
matchLabels:
deployment1: One
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
deployment1: One
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}$ cat deploy2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
deployment2: Two
name: nginx
spec:
replicas: 1
selector:
matchLabels:
deployment2: Two
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
deployment2: Two
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}创建第一个部署。
$ kubectl create -f deploy1.yaml
deployment.apps/nginx created在相同的命名空间和中创建第二个你应该会看到这个错误。
$ kubectl create -f deploy2.yaml
Error from server (AlreadyExists): error when creating "deploy2.yaml": deployments.apps "nginx" already exists发布于 2020-01-31 07:21:05
命名和标签需要从原始部署yaml更改。
如果您保持metadata.name不变,您将修改kubectl apply -f上的现有部署,而不是创建新部署。
我认为如果所有运行的都是cron,那么就不需要端口,除非它运行的是supplier-service的一个完整实例
如果您将标签app: supplier-service保留在cron容器上,现有的Service选择器将会被混淆。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: supplier-service
app.kubernetes.io/instance: supplier-service-instance
app.kubernetes.io/version: '1.0.0'
app.kubernetes.io/managed-by: kubectl
name: supplier-service-cron-deployment
spec:
replicas: 1
selector:
matchLabels:
app: supplier-service-cron
template:
metadata:
labels:
app: supplier-service-cron
spec:
containers:
- image: AWS-ECR/supplier-service-cron:latest
imagePullPolicy: Always
name: supplier-service-cron此外,kubernetes还提供了一个独立的cronjob功能,以防您不知道。
https://stackoverflow.com/questions/59980926
复制相似问题