Kubernetes 无法覆盖部署k8s的“副本”
我遇到过这样的问题: 首先,我使用helm创建了一个发行版Kubernetes 无法覆盖部署k8s的“副本”,kubernetes,kubernetes-helm,Kubernetes,Kubernetes Helm,我遇到过这样的问题: 首先,我使用helm创建了一个发行版nginx: helm upgrade --install --namespace test nginx bitnami/nginx --debug LAST DEPLOYED: Wed Jul 22 15:17:50 2020 NAMESPACE: test STATUS: DEPLOYED RESOURCES: ==> v1/ConfigMap NAME DATA AGE nginx-serv
nginx
:
helm upgrade --install --namespace test nginx bitnami/nginx --debug
LAST DEPLOYED: Wed Jul 22 15:17:50 2020
NAMESPACE: test
STATUS: DEPLOYED
RESOURCES:
==> v1/ConfigMap
NAME DATA AGE
nginx-server-block 1 2s
==> v1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 0/1 1 0 2s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
nginx-6bcbfcd548-kdf4x 0/1 ContainerCreating 0 1s
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx LoadBalancer 10.219.6.148 <pending> 80:30811/TCP,443:31260/TCP 2s
NOTES:
Get the NGINX URL:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
Watch the status with: 'kubectl get svc --namespace test -w nginx'
export SERVICE_IP=$(kubectl get svc --namespace test nginx --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
echo "NGINX URL: http://$SERVICE_IP/"
其次,我使用kubectl
命令编辑部署,将其扩展到2个吊舱
kubectl -n test edit deployment nginx
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: "2020-07-22T08:17:51Z"
generation: 1
labels:
app.kubernetes.io/instance: nginx
app.kubernetes.io/managed-by: Tiller
app.kubernetes.io/name: nginx
helm.sh/chart: nginx-6.0.2
name: nginx
namespace: test
resourceVersion: "128636260"
selfLink: /apis/extensions/v1beta1/namespaces/test/deployments/nginx
uid: d63b0f05-cbf3-11ea-99d5-42010a8a00f1
spec:
progressDeadlineSeconds: 600
replicas: 2
...
我保存这个,检查状态以查看部署已扩展到2个吊舱:
kubectl -n test get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 2/2 2 2 7m50s
最后,我使用helm升级版本,正如预期的那样,helm将覆盖部署到1个pod,就像第一步一样,但现在,部署将保留值副本:2
,即使您将值(在helm的values.yaml文件中)设置为任意数。
我使用头盔
命令的选项重新创建吊舱
:
helm upgrade --install --namespace test nginx bitnami/nginx --debug --recreate-pods
Release "nginx" has been upgraded. Happy Helming!
LAST DEPLOYED: Wed Jul 22 15:31:24 2020
NAMESPACE: test
STATUS: DEPLOYED
RESOURCES:
==> v1/ConfigMap
NAME DATA AGE
nginx-server-block 1 13m
==> v1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 0/2 2 0 13m
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
nginx-6bcbfcd548-b4bfs 0/1 ContainerCreating 0 1s
nginx-6bcbfcd548-bzhf2 0/1 ContainerCreating 0 1s
nginx-6bcbfcd548-kdf4x 0/1 Terminating 0 13m
nginx-6bcbfcd548-xfxbv 1/1 Terminating 0 6m16s
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx LoadBalancer 10.219.6.148 34.82.120.134 80:30811/TCP,443:31260/TCP 13m
NOTES:
Get the NGINX URL:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
Watch the status with: 'kubectl get svc --namespace test -w nginx'
export SERVICE_IP=$(kubectl get svc --namespace test nginx --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
echo "NGINX URL: http://$SERVICE_IP/"
结果:在手动编辑部署中的副本
后,我无法使用helm覆盖此值副本
,但我仍然可以更改图像等。。。只有副本不会更改
我已经运行了--debug
,helm仍然使用副本创建部署:1
# Source: nginx/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app.kubernetes.io/name: nginx
helm.sh/chart: nginx-6.0.2
app.kubernetes.io/instance: nginx
app.kubernetes.io/managed-by: Tiller
spec:
selector:
matchLabels:
app.kubernetes.io/name: nginx
app.kubernetes.io/instance: nginx
replicas: 1
template:
metadata:
labels:
app.kubernetes.io/name: nginx
helm.sh/chart: nginx-6.0.2
app.kubernetes.io/instance: nginx
app.kubernetes.io/managed-by: Tiller
spec:
containers:
- name: nginx
image: docker.io/bitnami/nginx:1.19.1-debian-10-r0
imagePullPolicy: "IfNotPresent"
ports:
- name: http
containerPort: 8080
livenessProbe:
failureThreshold: 6
initialDelaySeconds: 30
tcpSocket:
port: http
timeoutSeconds: 5
readinessProbe:
initialDelaySeconds: 5
periodSeconds: 5
tcpSocket:
port: http
timeoutSeconds: 3
resources:
limits: {}
requests: {}
volumeMounts:
- name: nginx-server-block-paths
mountPath: /opt/bitnami/nginx/conf/server_blocks
volumes:
- name: nginx-server-block-paths
configMap:
name: nginx-server-block
items:
- key: server-blocks-paths.conf
path: server-blocks-paths.conf
但是k8s部署将保持值副本
与编辑手册中的值相同副本:2
据我所知,helm
命令的输出是create k8s yaml file,为什么在这种情况下我不能使用helm
覆盖特定值replications
Tks提前
我只是想知道这里的行为是什么,Tks
舵型
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.0", GitCommit:"79d07943b03aea2b76c12644b4b54733bc5958d6", GitTreeState:"clean"}
请使用helm的replicaCount字段来管理副本
我将其视为选项请使用helm的replicaCount字段来管理副本
我将其视为选项让我知道您正在使用的头盔版本。还有一个已知的bug,如果它没有升级副本,请检查链接
告诉我您正在使用的头盔版本。还有一个已知的bug,如果它没有升级副本,请检查链接 请看一下 新版本的Helm发布后,将根据Kubernetes的特定次要版本进行编译。例如,Helm 3.0.0使用Kubernetes 1.16.2客户端与Kubernetes进行交互,因此它与Kubernetes 1.16兼容。 自Helm 3开始,假设Helm与Kubernetes的n-3版本兼容。由于Kubernetes在次要版本之间的变化,Helm 2的支持政策稍微严格一些,假设与Kubernetes的n-1版本兼容 例如,如果您使用的是根据Kubernetes 1.17客户端API编译的版本的Helm 3,那么与Kubernetes 1.17、1.16、1.15和1.14一起使用应该是安全的。如果您使用的是根据Kubernetes 1.16客户端API编译的Helm 2版本,那么应该可以安全地与Kubernetes 1.16和1.15一起使用 不建议将Helm与Kubernetes的版本一起使用,因为Helm不保证任何前向兼容性,Kubernetes的版本比编译它时使用的版本要新 如果您选择将头盔与不支持的Kubernetes版本一起使用,则使用该头盔的风险自负。 我已经使用带有helm 3.2v的1.17.9 k8s版本测试了这些行为,下面提到的所有部署更新方法都按预期工作
helm upgrade --install nginx bitnami/nginx
helm fetch bitnami/nginx --untar (create custom vaules.yaml and change the replicaCount parameter in values.yaml and save it)
helm upgrade --install nginx bitnami/nginx -f values.yaml ./nginx
helm upgrade --install nginx bitnami/nginx -f values.yaml ./nginx --set replicaCount=2
注意:
values.yaml是默认值,可以由父图表的values.yaml覆盖,后者又可以由用户提供的值文件覆盖,后者又可以由--set参数覆盖
所以我的建议是让你的工具保持最新
注意:
对于《掌舵2》,我们将继续接受bug修复,并修复出现的任何安全问题,但不会接受任何新功能。所有功能开发将转移到掌舵3
头盔3公开发布6个月后,头盔2将停止接受bug修复。只接受安全问题
头盔3公开发布12个月后,对头盔2的支持将正式结束
请看一看
新版本的Helm发布后,将根据Kubernetes的特定次要版本进行编译。例如,Helm 3.0.0使用Kubernetes 1.16.2客户端与Kubernetes进行交互,因此它与Kubernetes 1.16兼容。
自Helm 3开始,假设Helm与Kubernetes的n-3版本兼容。由于Kubernetes在次要版本之间的变化,Helm 2的支持政策稍微严格一些,假设与Kubernetes的n-1版本兼容
例如,如果您使用的是根据Kubernetes 1.17客户端API编译的版本的Helm 3,那么与Kubernetes 1.17、1.16、1.15和1.14一起使用应该是安全的。如果您使用的是根据Kubernetes 1.16客户端API编译的Helm 2版本,那么应该可以安全地与Kubernetes 1.16和1.15一起使用
不建议将Helm与Kubernetes的版本一起使用,因为Helm不保证任何前向兼容性,Kubernetes的版本比编译它时使用的版本要新
如果您选择将头盔与不支持的Kubernetes版本一起使用,则使用该头盔的风险自负。
我已经使用带有helm 3.2v的1.17.9 k8s版本测试了这些行为,下面提到的所有部署更新方法都按预期工作
helm upgrade --install nginx bitnami/nginx
helm fetch bitnami/nginx --untar (create custom vaules.yaml and change the replicaCount parameter in values.yaml and save it)
helm upgrade --install nginx bitnami/nginx -f values.yaml ./nginx
helm upgrade --install nginx bitnami/nginx -f values.yaml ./nginx --set replicaCount=2
注意:
values.yaml是默认值,可以由父图表的values.yaml覆盖,后者又可以由用户提供的值文件覆盖,后者又可以由--set参数覆盖
所以我的建议是让你