我有一个下面描述的设置 - 所以一个简单的复制控制器,服务和一个https ingress在谷歌云上部署kubernetes。
我需要暂停我的应用程序,以便我可以测试堆栈其余部分的反应 - 这是一个很好的方法吗?
我已经尝试删除该服务,但是当我重新创建它时,它不会获取后端服务(复制控制器和pod已创建,我可以在内部访问它们,但不能通过入口 - 服务没有看到它。
echo "
apiVersion: v1
kind: Service
metadata:
name: nodeapp-https
labels:
app: nodeapp-https
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
app: nodeapp-https
---
apiVersion: v1
kind: ReplicationController
metadata:
name: nodeapp-https
spec:
replicas: 1
template:
metadata:
labels:
app: nodeapp-https
spec:
containers:
- name: nodeapp-https
image: gcr.io/my-project/node-app:v84
ports:
- containerPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nodeapp-httpss
spec:
tls:
- secretName: node-app-secret
backend:
serviceName: nodeapp-https
servicePort: 80
" | kubectl create -f -
答案 0 :(得分:15)
您可以在测试期间将副本计数设置为0。完成测试后,您可以将副本计数重置为所需的数量,以便重新启动应用程序。
执行此操作的命令将是
$ kubectl scale rc nodeapp-https --replicas=0
... do your test
$ kubectl scale rc nodeapp-https --replicas=1
答案 1 :(得分:1)
如果您使用的是Deployment
(k8s中的新概念),则可以使用以下命令按比例缩小副本(窗格的数量)
kubectl scale deployment/<<my-service-name>> --replicas=0 --namespace <<my_namespace>>
deployment.apps/my-service-name scaled
您可以通过描述deployment
来验证副本的更改,
kubectl describe deployment my-service-name --namespace my-namespace
Name: my-service-name
Namespace: my-namespace
CreationTimestamp: Tue, 03 Mar 2020 17:19:41 -0800
Labels: app=<<my-service-name>>
Annotations: deployment.kubernetes.io/revision=91
kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"my-service-name"},"name":"my-service-name","namespace":"my_namespace"},"sp...
Selector: app=my-service-name
Replicas: 0 desired | 0 updated | 0 total | 0 available | 0 unavailable
...
要使副本运行,您可以使用缩小比例的相同命令来放大
kubectl scale deployment/<<my-service-name>> --replicas=1 --namespace <<my-namespace-name>>
对于这个问题,my-service-name
是nodeapp-https
,但是它使用ReplicationController(在k8s中不再推荐使用)而不是Deployment。
阅读: