k8s in action实践笔记

2.2 配置Kubernetes集群

2021-07-05  本文已影响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)
上一篇下一篇

猜你喜欢

热点阅读