在docker-for-desktop OSX上删除kubernetes集群

时间:2018-10-18 14:22:34

标签: docker kubernetes kubectl minikube

在OSX上docker-for-desktopminikube delete的等效命令是什么

据我了解,minikube创建了一个VM来托管其kubernetes集群,但我不了解docker-for-desktop如何在OSX上管理它。

7 个答案:

答案 0 :(得分:11)

在OS X的Docker中拆除Kubernetes是一件容易的事。

转到Preferences,打开Reset标签,然后单击Reset Kubernetes cluster

enter image description here

之前用Kubectl创建的所有对象将被删除。

您还可以重置Docker VM映像(Reset disk image)和所有设置(Reset to factory defaults),甚至卸载Docker。

答案 1 :(得分:2)

这实际上是代码的内幕。 Docker for Mac使用以下组件:HyperkitVPNkitDataKit

Kubernetes在为docker创建的同一Hyperkit VM中运行,并且kube-apiserver被公开。

您可以使用以下方法连接到VM:

screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

然后,您可以在VM中看到所有Kubernetes进程:

linuxkit-025000000001:~# ps -Af | grep kube
 1251 root      0:00 /usr/bin/logwrite -n kubelet /usr/bin/kubelet.sh
 1288 root      0:51 kubelet --kubeconfig=/etc/kubernetes/kubelet.conf --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --cluster-dns=10.96.0.10 --cluster-domain=cluster.local --cgroups-per-qos=false --enforce-node-allocatable= --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin --cadvisor-port=0 --kube-reserved-cgroup=podruntime --system-reserved-cgroup=systemreserved --cgroup-root=kubepods --hostname-override=docker-for-desktop --fail-swap-on=false
 3564 root      0:26 kube-scheduler --address=127.0.0.1 --leader-elect=true --kubeconfig=/etc/kubernetes/scheduler.conf
 3616 root      1:45 kube-controller-manager --cluster-signing-key-file=/run/config/pki/ca.key --address=127.0.0.1 --root-ca-file=/run/config/pki/ca.crt --service-account-private-key-file=/run/config/pki/sa.key --kubeconfig=/etc/kubernetes/controller-manager.conf --cluster-signing-cert-file=/run/config/pki/ca.crt --leader-elect=true --use-service-account-credentials=true --controllers=*,bootstrapsigner,tokencleaner
 3644 root      1:59 kube-apiserver --admission-control=Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota --requestheader-username-headers=X-Remote-User --requestheader-group-headers=X-Remote-Group --service-account-key-file=/run/config/pki/sa.pub --secure-port=6443 --insecure-port=8080 --insecure-bind-address=0.0.0.0 --requestheader-client-ca-file=/run/config/pki/front-proxy-ca.crt --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-extra-headers-prefix=X-Remote-Extra- --advertise-address=192.168.65.3 --service-cluster-ip-range=10.96.0.0/12 --tls-private-key-file=/run/config/pki/apiserver.key --enable-bootstrap-token-auth=true --requestheader-allowed-names=front-proxy-client --tls-cert-file=/run/config/pki/apiserver.crt --proxy-client-key-file=/run/config/pki/front-proxy-client.key --proxy-client-cert-file=/run/config/pki/front-proxy-client.crt --allow-privileged=true --client-ca-file=/run/config/pki/ca.crt --kubelet-client-certificate=/run/config/pki/apiserver-kubelet-client.crt --kubelet-client-key=/run/config/pki/apiserver-kubelet-client.key --authorization-mode=Node,RBAC --etcd-servers=https://127.0.0.1:2379 --etcd-cafile=/run/config/pki/etcd/ca.crt --etcd-certfile=/run/config/pki/apiserver-etcd-client.crt --etcd-keyfile=/run/config/pki/apiserver-etcd-client.key
 3966 root      0:01 /kube-dns --domain=cluster.local. --dns-port=10053 --config-dir=/kube-dns-config --v=2
 4190 root      0:05 /usr/local/bin/kube-proxy --config=/var/lib/kube-proxy/config.conf
 4216 65534     0:03 /sidecar --v=2 --logtostderr --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,SRV --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,SRV
 4606 root      0:00 /compose-controller --kubeconfig  --reconciliation-interval 30s
 4905 root      0:01 /api-server --kubeconfig  --authentication-kubeconfig  --authorization-kubeconfig  --etcd-servers=https://127.0.0.1:2379 --etcd-cafile=/etc/docker-compose/etcd/ca.crt --etcd-certfile=/etc/docker-compose/etcd/client.crt --etcd-keyfile=/etc/docker-compose/etcd/client.key --secure-port=9443 --tls-ca-file=/etc/docker-compose/tls/ca.crt --tls-cert-file=/etc/docker-compose/tls/server.crt --tls-private-key-file=/etc/docker-compose/tls/server.key

因此,如果您取消选中以下框(从docs不清楚它使用什么命令):

docker

您可以看到这些进程已删除:

linuxkit-025000000001:~# [ 6616.856404] cni0: port 2(veth5f6c8b28) entered disabled state
[ 6616.860520] device veth5f6c8b28 left promiscuous mode
[ 6616.861125] cni0: port 2(veth5f6c8b28) entered disabled state

linuxkit-025000000001:~#
linuxkit-025000000001:~# [ 6626.816763] cni0: port 1(veth87e77142) entered disabled state
[ 6626.822748] device veth87e77142 left promiscuous mode
[ 6626.823329] cni0: port 1(veth87e77142) entered disabled state

linuxkit-025000000001:~# ps -Af | grep kube
linuxkit-025000000001:~#

答案 2 :(得分:2)

要使用命令行重置Docker-desktop Kubernetes集群,请将以下内容放入文件(dd-reset.sh)并将其标记为可执行文件(chmod a+x dd-reset.sh

#!/bin/bash

dr='docker run -it --rm --privileged --pid=host debian nsenter -t 1 -m -u -n -i'

${dr} sh -c 'export PATH=$PATH:/containers/services/docker/rootfs/usr/bin:/containers/services/docker/rootfs/usr/local/bin:/var/lib/kube-binary-cache/ && \
if [ ! -e /var/run/docker.sock ] ; then ln -s /containers/services/docker/rootfs/var/run/docker.sock /var/run/docker.sock ; fi && \
kube-reset.sh'

sleep 3

echo "cluster resetted. restarting docker-desktop..."
osascript -e 'quit app "Docker"'

open --background -a Docker
echo "docker-desktop started. Wait 3-5 mins for kubernetes to start."

说明

此方法使用Docker-desktop VM中的内部脚本。为了使其正常工作,需要对用户环境进行一些准备。

我无法从VM内部使用kube-start.sh脚本启动Kubernetes集群,因此我使用MacOS命令来重新启动Docker应用程序。

即使当前未在Docker首选项中启用您的Kubernetes集群,此方法仍然有效,但是必须至少启用一次Kubernetes才能使用脚本。

它已在Docker Edge for MacOS v2.2.2.0 (43066)上进行了测试
不能保证它将与早期或更高版本兼容。

此版本的Docker使用kubeadm初始化Kubernetes集群。脚本位于文件夹/containers/services/docker/rootfs/usr/bin中:

  • kube-pull.sh(将kubernetes二进制文件引入VM)
  • kube-reset.sh(运行kube-stop.sh并执行kubeadm reset和一些rm的东西)
  • kube-restart.sh(运行kube-stop.shkube-start.sh
  • kube-start.sh(运行kube-pull.shkubelet.sh
  • kube-stop.sh(杀死kubeletkube-apiserver进程以及所有k8s容器)
  • kubeadm-init.sh(初始化Kubernetes集群)
  • kubelet.sh(运行kubeadm-init.sh并开始kubelet二进制文件)

集群配置位于文件/containers/services/docker/lower/etc/kubeadm/kubeadm.yaml

已使用的资源

答案 3 :(得分:2)

由于kubectl随Docker Desktop一起提供,您可以使用它来删除特定的集群。

kubectl config delete-cluster <cluster name>

使用kubectl config get-clusters获取群集名称

您可能希望删除与已删除集群关联的其他configs,例如集群的context / user

kubectl config delete-context <cluster context>
kubectl config get-contexts
kubectl config unset users.<cluster-user>

所有这些都是在kubeconfig文件(.kube/config)中定义的属性。使用unset删除属性。

kubectl config unset PROPERTY_NAME [options]

答案 4 :(得分:1)

只需删除保存kubernetes资源的虚拟机即可。

$ minikube delete

答案 5 :(得分:0)

在Mac的最新Docker Edge版本(2.1.7)Preferences中,设计已更改。现在,您可以通过切换到Preferences窗口右上方的错误平面来重置Kubernetes集群和其他docker方面:

注意:仅在启用Kubernetes集群后才能重置它。如果取消选中“启用Kubernetes”复选框,则“重置Kubernetes群集”按钮将变为非活动状态。

enter image description here

为方便起见,“重置Kubernetes群集”也出现在主“偏好设置”平面的Kubernetes选项卡上:

enter image description here

答案 6 :(得分:0)

在 docker 桌面版本 3.5.2(引擎版本 20.10.7)上,重置按钮已移至 docker 首选项内。

您可以按照以下步骤到达那里:

  1. 单击菜单栏中的泊坞窗图标并选择“首选项”。 enter image description here
  2. 转到 Kubernetes 选项卡。 enter image description here
  3. 点击 Reset Kubernetes CLuster 按钮。这是红色按钮。

这将删除所有 pod 并重置 kubernetes。您可以在终端执行 docker ps 命令以验证没有容器在运行。enter image description here