Docker 需要在图像中使用Kubectl二进制文件
我的目标是拥有一个内部装有可工作的Kubectl二进制文件的吊舱。 不幸的是,我使用基本yaml从docker hub引导的每个kubectl映像都会导致崩溃或其他问题 有人有一些yaml(部署、吊舱等)可以让我得到我的kubectl吗Docker 需要在图像中使用Kubectl二进制文件,docker,kubernetes,kubectl,dockerhub,Docker,Kubernetes,Kubectl,Dockerhub,我的目标是拥有一个内部装有可工作的Kubectl二进制文件的吊舱。 不幸的是,我使用基本yaml从docker hub引导的每个kubectl映像都会导致崩溃或其他问题 有人有一些yaml(部署、吊舱等)可以让我得到我的kubectl吗 我尝试了一系列基本yaml图像: apiVersion: apps/v1 kind: Deployment metadata: name: kubectl-demo labels: app: deploy role: backend s
我尝试了一系列基本yaml图像:
apiVersion: apps/v1
kind: Deployment
metadata:
name: kubectl-demo
labels:
app: deploy
role: backend
spec:
replicas: 1
selector:
matchLabels:
app: deploy
role: backend
template:
metadata:
labels:
app: deploy
role: backend
spec:
containers:
- name: kubectl-demo
image: <SOME_IMAGE>
ports:
- containerPort: 80
apiVersion:apps/v1
种类:部署
元数据:
名称:kubectl demo
标签:
应用程序:部署
角色:后端
规格:
副本:1份
选择器:
火柴标签:
应用程序:部署
角色:后端
模板:
元数据:
标签:
应用程序:部署
角色:后端
规格:
容器:
-名称:kubectl demo
图片:
端口:
-集装箱港口:80
Thx正如Suren在评论中已经解释的那样,
kubectl
不是守护进程,因此kubectl将运行、退出并导致容器重新启动
对此,有两种变通方法。其中之一是使用sleep
命令和infinity
参数。这将使Pod保持活动状态,防止其重新启动,并允许您在其中执行
下面是一个如何做到这一点的示例:
spec:
containers:
- image: bitnami/kubectl
command:
- sleep
- "infinity"
name: kctl
让我知道这是否有帮助 或者,您可以这样做。它在我的上下文中工作,在VMs上使用kubernetes,我知道哪里是
kubeconfig
文件。您需要进行必要的更改,使其在您的环境中工作
apiVersion: apps/v1
kind: Deployment
metadata:
name: kubectl
spec:
replicas: 1
selector:
matchLabels:
role: kubectl
template:
metadata:
labels:
role: kubectl
spec:
containers:
- image: viejo/kubectl
name: kubelet
tty: true
securityContext:
privileged: true
volumeMounts:
- name: kube-config
mountPath: /root/.kube/
volumes:
- name: kube-config
hostPath:
path: /home/$USER/.kube/
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/master
operator: Exists
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
operator: Exists
结果是:
$ kubectl get po
NAME READY STATUS RESTARTS AGE
kubectl-cb8bfc6dd-nv6ht 1/1 Running 0 70s
$ kubectl exec kubectl-cb8bfc6dd-nv6ht -- kubectl get no
NAME STATUS ROLES AGE VERSION
kubernetes-1-17-master Ready master 16h v1.17.3
kubernetes-1-17-worker Ready <none> 16h v1.17.3
$kubectl获得订单
名称就绪状态重新启动
kubectl-cb8bfc6dd-nv6ht 1/1运行0 70秒
$kubectl执行官kubectl-cb8bfc6dd-nv6ht——kubectl获取编号
姓名状态角色年龄版本
kubernetes-1-17-master Ready master 16h v1.17.3
kubernetes-1-17-worker Ready 16h v1.17.3
因为kubectl
不是守护进程,所以容器死亡。只要在容器中运行一个进程并使用kubectl。@当然,我认为我不能在crashLoopbackOff pod中执行,可以吗?您打算如何在内部运行流程?我明白了。因为所有图像都是从构建器kubectl
复制的,不会离开shell或bash。让我来制作一个可以用的。使用此图像:viejo/kubelet
。但你不能只运行它。Dokubectl run-it kubectl--image viejo/kubectl sh
。然后退出容器。容器将重新启动并保持运行,因为它将自动运行sh
?您将如何称呼kubectl?非常感谢!我需要几天时间,但我会测试一下,然后再给你回复。谢谢