【问题标题】:Delete kubernetes cluster on docker-for-desktop OSX?在 docker-for-desktop OSX 上删除 kubernetes 集群?
【发布时间】:2019-03-23 09:23:17
【问题描述】:

OSX 上docker-for-desktop 中minikube delete 的等效命令是什么

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

【问题讨论】:

    标签: docker kubernetes kubectl minikube


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 在 Docker for Mac 18.06.1-ce 上,没有重置 Kubernetes 集群按钮。但是,禁用 Kubernetes 并在 Kubernetes 选项卡上点击应用是有效的。
    • 有什么方法可以从命令行执行此操作?每次进入 UI 都很糟糕。
    • 这其实和windows上的docker for desktop是一样的
    • 谢谢。它似乎已移至首选项中的“Kubernetes”选项卡,但仍有一个重置按钮。
    • 是否有标准的方法来删除 kubectl 安装?
    【解决方案2】:

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

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

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

    【讨论】:

    • 重新设计的不幸之处在于,如果您卡在“Kubernetes 正在启动”上,您将无法禁用它。
    • 重启 docker 引擎是否有助于禁用 Kubernetes?
    • 不,它没有帮助。我也卡住了试图在控制台中找到配置以禁用它
    • 您也可以尝试“重置为出厂默认设置”吗?
    • 不,但重新启动我的 MBP 确实解决了它。
    【解决方案3】:

    它确实在代码的底层。 Docker for Mac 使用这些组件:Hyperkit、VPNkit 和 DataKit

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

    你可以用这个连​​接到虚拟机:

    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
    

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

    可以看到进程被移除了:

    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:~#
    

    【讨论】:

    • 是的,我这样做了,但是当您再次启用它时,集群仍然存在
    • 这在 Docker for Mac 上对我有用 18.06.1-ce - 您必须点击 Apply 才能使更改生效。
    • @Rico 是否有一行代码可以通过编程方式而不是通过 GUI 重置 docker for mac 上的 kubernetes 集群?
    • 必须有 api 端点和/或命令行,但它似乎没有发布。您可能需要查看源代码。
    【解决方案4】:

    要使用命令行重置 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 应用程序。

    即使您的 Kubernetes 集群目前未在 Docker 首选项中启用,此方法也有效,但需要至少启用一次 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.sh 和 kube-start.sh)
    • kube-start.sh(运行 kube-pull.sh 和 kubelet.sh)
    • kube-stop.sh(杀死 kubelet 和 kube-apiserver 进程,以及所有 k8s 容器)
    • kubeadm-init.sh(初始化 Kubernetes 集群)
    • kubelet.sh(运行 kubeadm-init.sh 并启动 kubelet 二进制)

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

    使用的资源:

    【讨论】:

    【解决方案5】:

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

    您可以通过以下步骤到达那里:

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

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

    【讨论】:

      【解决方案6】:

      只需删除保存 kubernetes 资源的 vm。

      $ minikube delete

      【讨论】:

        猜你喜欢
        • 2019-05-04
        • 2020-01-03
        • 1970-01-01
        • 2020-09-08
        • 2019-12-31
        • 2020-02-14
        • 2021-11-23
        • 1970-01-01
        • 2019-07-14
        相关资源
        最近更新 更多