2.2 配置Kubernetes集群

作者: 众神开挂 | 来源:发表于2021-07-05 08:41 被阅读0次

    2.2 配置Kubernetes集群

    现在,应用被打包在一个容器镜像中,并通过Docker Hub给大家使用,可以将它部署到Kubernetes集群中,而不是直接在Docker中运行。但是需要先设置集群。

    2.2.1 用Minikube运行一个本地单节点Kubernetes集群

    使用Minikube是运行Kubernetes集群最简单、最快捷的途径。Minikube是一个构建单节点集群的工具,对于测试Kubernetes和本地开发应用都非常有用。

    虽然我们不能展示与管理多节点应用相关的一些Kubernetes特性,但是单节点集群足以探索本书中讨论的大多数主题。

    一键安装Minikube

    https://minikube.sigs.k8s.io/docs/start/

    推荐阿里团队编译的版本

    https://github.com/AliyunContainerService/minikube/wiki

    docker 权限问题

    https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user

    安装kubectl
    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
    
    sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
    
    启动 dashboard:
    
    minikube dashboard
    为 dashboard 添加外部访问代理,此处的 IP 为本地系统 IP:
    
    kubectl proxy --port=8001 --address='10.0.0.2' --accept-hosts='^.*' &
    通过 url: http://192.168.0.43:8001/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/ 访问 dashboard。
    

    使用kubectl查看集群是否正常工作

    要验证集群是否正常工作,可以使用以下所示的 kubectl cluster-info命令。

    代码清单2.11 展示集群信息

    s kubectl cluster-info
    Kubernetes master is running at https://192.168.99.100:8443
    KubeDNS is running at https://192.168.99.100:8443/api/v1/proxy/...
    kubernetes-dashboard is running at https://192.168.99.100:8443/api/v1/.....
    

    这里显示集群已经启动。它显示了各种Kubernetes组件的URL,包括API服务器和Web控制台。

    提示 可以运行 minikube ssh 登录到Minikube VM并从内部探索它。例如,可以查看在节点上运行的进程。

    通过列出集群节点查看集群是否在运行

    现在可以使用kubectl命令列出集群中的所有节点,如下面的代码清单所示。

    代码清单2.13 使用kubectl列出集群节点

    # kubectl get nodes
    NAME         STATUS     ROLES                  AGE   VERSION
    k8s-master   NotReady   control-plane,master   10h   v1.20.2
    k8s-node1    NotReady   <none>                 9h    v1.20.2
    k8s-node2    NotReady   <none>                 9h    v1.20.2
    

    kubectl get 命令可以列出各种Kubernetes对象。你将会经常使用到它,但它通常只会显示对象最基本的信息。

    查看对象的更多信息

    要查看关于对象的更详细的信息,可以使用 kubectl describe 命令,它显示了更多信息:

    # kubectl get node
    NAME       STATUS   ROLES                  AGE   VERSION
    minikube   Ready    control-plane,master   36d   v1.20.2
    # kubectl describe node
    Name:               minikube
    Roles:              control-plane,master
    Labels:             beta.kubernetes.io/arch=amd64
                        beta.kubernetes.io/os=linux
                        kubernetes.io/arch=amd64
                        kubernetes.io/hostname=minikube
                        kubernetes.io/os=linux
                        minikube.k8s.io/commit=c61663e942ec43b20e8e70839dcca52e44cd85ae
                        minikube.k8s.io/name=minikube
                        minikube.k8s.io/updated_at=2021_05_29T04_31_54_0700
                        minikube.k8s.io/version=v1.20.0
                        node-role.kubernetes.io/control-plane=
                        node-role.kubernetes.io/master=
    Annotations:        kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
                        node.alpha.kubernetes.io/ttl: 0
                        volumes.kubernetes.io/controller-managed-attach-detach: true
    CreationTimestamp:  Sat, 29 May 2021 04:31:13 -0400
    Taints:             <none>
    Unschedulable:      false
    Lease:
      HolderIdentity:  minikube
      AcquireTime:     <unset>
      RenewTime:       Sun, 04 Jul 2021 05:37:02 -0400
    Conditions:
      Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
      ----             ------  -----------------                 ------------------                ------                       -------
      MemoryPressure   False   Sun, 04 Jul 2021 05:33:19 -0400   Sat, 29 May 2021 04:31:10 -0400   KubeletHasSufficientMemory   kubelet has sufficient memory available
      DiskPressure     False   Sun, 04 Jul 2021 05:33:19 -0400   Sat, 29 May 2021 04:31:10 -0400   KubeletHasNoDiskPressure     kubelet has no disk pressure
      PIDPressure      False   Sun, 04 Jul 2021 05:33:19 -0400   Sat, 29 May 2021 04:31:10 -0400   KubeletHasSufficientPID      kubelet has sufficient PID available
      Ready            True    Sun, 04 Jul 2021 05:33:19 -0400   Sat, 29 May 2021 04:31:24 -0400   KubeletReady                 kubelet is posting ready status
    Addresses:
      InternalIP:  172.17.0.2
      Hostname:    minikube
    Capacity:
      cpu:                4
      ephemeral-storage:  36714992Ki
      hugepages-2Mi:      0
      memory:             3825960Ki
      pods:               110
    Allocatable:
      cpu:                4
      ephemeral-storage:  36714992Ki
      hugepages-2Mi:      0
      memory:             3825960Ki
      pods:               110
    System Info:
      Machine ID:                 822f5ed6656e44929f6c2cc5d6881453
      System UUID:                e2e7a85c-9a7a-43c3-a477-1de0508882b9
      Boot ID:                    b2e471d6-cf68-47e9-813e-d21d7d97d002
      Kernel Version:             4.18.0-305.7.1.el8_4.x86_64
      OS Image:                   Ubuntu 20.04.2 LTS
      Operating System:           linux
      Architecture:               amd64
      Container Runtime Version:  docker://20.10.6
      Kubelet Version:            v1.20.2
      Kube-Proxy Version:         v1.20.2
    PodCIDR:                      10.244.0.0/24
    PodCIDRs:                     10.244.0.0/24
    Non-terminated Pods:          (15 in total)
      Namespace                   Name                                         CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age
      ---------                   ----                                         ------------  ----------  ---------------  -------------  ---
      default                     balanced-5744b548b4-sdhbr                    0 (0%)        0 (0%)      0 (0%)           0 (0%)         35d
      default                     frontend-gcxkr                               0 (0%)        0 (0%)      0 (0%)           0 (0%)         35d
      default                     frontend-tpc2d                               0 (0%)        0 (0%)      0 (0%)           0 (0%)         35d
      default                     frontend-z54q5                               0 (0%)        0 (0%)      0 (0%)           0 (0%)         35d
      default                     hello-minikube-6ddfcc9757-v76vx              0 (0%)        0 (0%)      0 (0%)           0 (0%)         35d
      default                     kubia-deployment-779b677d96-4rn64            0 (0%)        0 (0%)      0 (0%)           0 (0%)         35d
      kube-system                 coredns-74ff55c5b-bbkgx                      100m (2%)     0 (0%)      70Mi (1%)        170Mi (4%)     36d
      kube-system                 etcd-minikube                                100m (2%)     0 (0%)      100Mi (2%)       0 (0%)         10m
      kube-system                 kube-apiserver-minikube                      250m (6%)     0 (0%)      0 (0%)           0 (0%)         10m
      kube-system                 kube-controller-manager-minikube             200m (5%)     0 (0%)      0 (0%)           0 (0%)         36d
      kube-system                 kube-proxy-cptsg                             0 (0%)        0 (0%)      0 (0%)           0 (0%)         36d
      kube-system                 kube-scheduler-minikube                      100m (2%)     0 (0%)      0 (0%)           0 (0%)         36d
      kube-system                 storage-provisioner                          0 (0%)        0 (0%)      0 (0%)           0 (0%)         36d
      kubernetes-dashboard        dashboard-metrics-scraper-f6647bd8c-mq6f7    0 (0%)        0 (0%)      0 (0%)           0 (0%)         35d
      kubernetes-dashboard        kubernetes-dashboard-968bcb79-8sr4b          0 (0%)        0 (0%)      0 (0%)           0 (0%)         35d
    Allocated resources:
      (Total limits may be over 100 percent, i.e., overcommitted.)
      Resource           Requests    Limits
      --------           --------    ------
      cpu                750m (18%)  0 (0%)
      memory             170Mi (4%)  170Mi (4%)
      ephemeral-storage  100Mi (0%)  0 (0%)
      hugepages-2Mi      0 (0%)      0 (0%)
    Events:
      Type     Reason                   Age                From        Message
      ----     ------                   ----               ----        -------
      Normal   Starting                 10m                kubelet     Starting kubelet.
      Normal   NodeAllocatableEnforced  10m                kubelet     Updated Node Allocatable limit across pods
      Normal   NodeHasSufficientMemory  10m (x7 over 10m)  kubelet     Node minikube status is now: NodeHasSufficientMemory
      Normal   NodeHasNoDiskPressure    10m (x8 over 10m)  kubelet     Node minikube status is now: NodeHasNoDiskPressure
      Normal   NodeHasSufficientPID     10m (x8 over 10m)  kubelet     Node minikube status is now: NodeHasSufficientPID
      Warning  readOnlySysFS            9m29s              kube-proxy  CRI error: /sys is read-only: cannot modify conntrack limits, problems may arise later (If running Docker, see docker issue #24000)
      Normal   Starting                 9m29s              kube-proxy  Starting kube-proxy.
    
    

    这里省略了 describe 命令的实际输出,因为内容非常多且在书中是完全不可读的。输出显示了节点的状态、CPU和内存数据、系统信息、运行容器的节点等。

    在前面的 kubectl describe 示例中,显式地指定了节点的名称,但也可以执行一个简单的 kubectl describe node 命令,而无须指定节点名,它将打印出所有节点的描述信息。

    提示 当只有一个给定类型的对象存在时,不指定对象名就运行 description和 get 命令是很提倡的,这样不会浪费时间输入或复制、粘贴对象的名称。

    当我们讨论减少输入的时候,开始在Kubernetes运行第一个应用程序之前,先学习如何让 kubectl 命令的使用变得更容易。

    2.2.3 为kubectl配置别名和命令行补齐

    kubectl 会被经常使用。很快你就会发现每次不得不打全命令是非常痛苦的。在继续之前,花一分钟为kubectl 设置别名和tab命令补全可让使用变得简单。

    创建别名

    在整本书中,一直会使用 kubectl 可执行文件的全名,但是你可以添加一个较短的别名,如 k,这样就不用每次都输入 kubectl 了。如果还没有设置别名,这里会告诉你如何定义。将下面的代码添加到 ~/.bashrc 或类似的文件中:

    alias k=kubectl
    #使配置生效
    $source ~/.bashrc 
    

    为kuebctl配置tab补全

    即使使用短别名k,仍然需要输入许多内容。幸运的是,kubectl命令还可以配置bash和zsh shell的代码补全。tab补全不仅可以补全命令名,还能补全对象名。例如,无须在前面的示例中输入整个节点名,只需输入

    $ kubectl desc<TAB> no<TAB> gke-ku<TAB>
    

    需要先安装一个叫作 bashcompletion 的包来启用bash中的tab命令补全,然后可以运行接下来的命令(也需要加到 ~/.bashrc 或类似的文件中):

    $ source <(kubectl completion bash)
    

    但是需要注意的是,tab命令行补全只在使用完整的 kubectl 命令时会起作用(当使用别名 k 时不会起作用)。需要改变 kubectl completion 的输出来修复:

    $ source <(kubectl completion bash | sed s/kubectl/k/g)
    

    相关文章

      网友评论

        本文标题:2.2 配置Kubernetes集群

        本文链接:https://www.haomeiwen.com/subject/oxsbultx.html