03kubeadm部署单Master节点k8s1.21集群

0 阅读13分钟

kubeadm部署单Master节点k8s1.21集群

k8s 1.21发布

image.png

介绍

2021年04月,Kubernetes 1.21正式与大家见面,这是2021 年的第一个版本!这个版本包含 51 个增强功能:13 个增强功能升级为稳定版,16 个增强功能升级为 beta 版,20 个增强功能进入 alpha 版,还有 2 个功能已经弃用

主要变化

CronJobs 毕业到稳定!

自 Kubernetes 1.8 以来,CronJobs一直是一个测试版功能!在 1.21 中,我们终于看到这个广泛使用的 API 毕业到稳定。

CronJobs 用于执行定期计划的操作,如备份、报告生成等。每个任务都应该被配置为无限期地重复出现(例如:一天/一周/一个月);你可以在该间隔内定义作业应该启动的时间点

不可变的 Secrets 和 ConfigMaps

Immutable Secrets和ConfigMaps为这些资源类型添加了一个新字段,如果设置了该字段,将拒绝对这些对象的更改。默认情况下,Secrets 和 ConfigMaps 是可变的,这对能够使用更改的 pod 是有益的。如果将错误的配置推送给使用它们的 pod,可变的 Secrets 和 ConfigMaps 也会导致问题。

通过将 Secrets 和 ConfigMaps 标记为不可变的,可以确保应用程序配置不会改变。如果你希望进行更改,则需要创建一个新的、唯一命名的 Secret 或 ConfigMap,并部署一个新的 pod 来消耗该资源。不可变资源也有伸缩性优势,因为控制器不需要轮询 API 服务器来观察变化

这个特性在 Kubernetes 1.21 中已经毕业到稳定

IPv4/IPv6 双栈支持

IP 地址是一种可消耗的资源,集群操作人员和管理员需要确保它不会耗尽。特别是,公共 IPv4 地址现在非常稀少。双栈支持使原生 IPv6 路由到 pod 和服务,同时仍然允许你的集群在需要的地方使用 IPv4。双堆栈集群网络还改善了工作负载的可能伸缩限制。

Kubernetes 的双栈支持意味着 pod、服务和节点可以获得 IPv4 地址和 IPv6 地址。在 Kubernetes 1.21 中,双栈网络已经从 alpha 升级到 beta,并且已经默认启用了

优雅的节点关闭

在这个版本中,优雅的节点关闭也升级到测试版(现在将提供给更大的用户群)!这是一个非常有益的特性,它允许 kubelet 知道节点关闭,并优雅地终止调度到该节点的 pod。

目前,当节点关闭时,pod 不会遵循预期的终止生命周期,也不会正常关闭。这可能会在许多不同的工作负载下带来问题。接下来,kubelet 将能够通过 systemd 检测到即将发生的系统关闭,然后通知正在运行的 pod,以便它们能够尽可能优雅地终止。

PersistentVolume 健康监测器

持久卷(Persistent Volumes,PV)通常用于应用程序中获取本地的、基于文件的存储。它们可以以许多不同的方式使用,并帮助用户迁移应用程序,而不需要重新编写存储后端。

Kubernetes 1.21 有一个新的 alpha 特性,允许对 PV 进行监视,以了解卷的运行状况,并在卷变得不健康时相应地进行标记。工作负载将能够对运行状况状态作出反应,以保护数据不被从不健康的卷上写入或读取。

减少 Kubernetes 的构建维护

以前,Kubernetes 维护了多个构建系统。这常常成为新贡献者和当前贡献者的摩擦和复杂性的来源。

在上一个发布周期中,为了简化构建过程和标准化原生的 Golang 构建工具,我们投入了大量的工作。这应该赋予更广泛的社区维护能力,并降低新贡献者进入的门槛。

重大变化

弃用 PodSecurityPolicy

在 Kubernetes 1.21 中,PodSecurityPolicy 已被弃用。与 Kubernetes 所有已弃用的特性一样,PodSecurityPolicy 将在更多版本中继续可用并提供完整的功能。先前处于测试阶段的 PodSecurityPolicy 计划在 Kubernetes 1.25 中删除。

接下来是什么?我们正在开发一种新的内置机制来帮助限制 Pod 权限,暂定名为“PSP 替换策略”。我们的计划是让这个新机制覆盖关键的 PodSecurityPolicy 用例,并极大地改善使用体验和可维护性。

弃用 TopologyKeys

服务字段 topologyKeys 现在已弃用;所有使用该字段的组件特性以前都是 alpha 特性,现在也已弃用。我们用一种实现感知拓扑路由的方法替换了 topologyKeys,这种方法称为感知拓扑提示。支持拓扑的提示是 Kubernetes 1.21 中的一个 alpha 特性。你可以在拓扑感知提示中阅读关于替换特性的更多细节;相关的KEP解释了我们替换的背景。

k8s 1.21.0 部署工具介绍

What is Kubeadm ?

Kubeadm is a tool built to provide best-practice "fast paths" for creating Kubernetes clusters. It performs the actions necessary to get a minimum viable, secure cluster up and running in a user friendly way. Kubeadm's scope is limited to the local node filesystem and the Kubernetes API, and it is intended to be a composable building block of higher level tools.

Kubeadm是为创建Kubernetes集群提供最佳实践并能够“快速路径”构建kubernetes集群的工具。它能够帮助我们执行必要的操作,以获得最小可行的、安全的集群,并以用户友好的方式运行。

Common Kubeadm cmdlets

  1. kubeadm init to bootstrap the initial Kubernetes control-plane node. 初始化
  2. kubeadm join to bootstrap a Kubernetes worker node or an additional control plane node, and join it to the cluster. 添加工作节点到kubernetes集群
  3. kubeadm upgrade to upgrade a Kubernetes cluster to a newer version. 更新kubernetes版本
  4. kubeadm reset to revert any changes made to this host by kubeadm init or kubeadm join. 重置kubernetes集群

k8s 1.21.0 部署环境准备

节点说明

使用CentOS7u9操作系统,然后准备如下配置的三个节点

ipCPU内存硬盘角色主机名
192.168.91.1702C2G40GBmastermaster01
192.168.91.1712C2G40GBworker(node)worker01
192.168.91.1722C2G40GBworker(node)worker02

节点配置

在上面准备的所有节点中操作

基础配置

# 配置hosts
cat >> /etc/hosts << EOF
192.168.91.170  master01
192.168.91.171  worker01
192.168.91.172  worker02
EOF

# 时间同步配置,最小化安装系统需要安装ntpdate软件
yum -y install ntpdate
echo "0 */1 * * * ntpdate time1.aliyun.com" >> /var/spool/cron/root

crontab -l
0 */1 * * * ntpdate time1.aliyun.com

# 关闭防火墙
systemctl disable firewalld && systemctl stop firewalld

firewall-cmd --state
not running

# 永久关闭selinux,一定要重启操作系统后生效
# 修改SELinux配置
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 临时关闭,不重启操作系统,即刻生效
setenforce 0 

升级操作系统内核

# 导入elrepo gpg key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 安装elrepo YUM源仓库
yum -y install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
# 安装kernel-ml版本,ml为长期稳定版本,lt为长期维护版本
yum --enablerepo="elrepo-kernel" -y install kernel-ml.x86_64
# 设置grub2默认引导为0
grub2-set-default 0
# 重新生成grub2引导文件
grub2-mkconfig -o /boot/grub2/grub.cfg

# 升级内核需要重启才能生效,重启之前查看老的内核
uname -r
3.10.0-1160.71.1.el7.x86_64

# 重启
reboot

# 重启后,需要验证内核是否为更新对应的版本
uname -r
6.5.7-1.el7.elrepo.x86_64

配置内核转发及网桥过滤

# 添加网桥过滤及内核转发配置文件
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

# 加载br_netfilter模块
modprobe br_netfilter

# 查看是否加载
lsmod | grep br_netfilter
br_netfilter           32768  0

# 加载网桥过滤及内核转发配置文件
sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0

安装ipset及ipvsadm

主要用于实现service转发

# 安装ipset及ipvsadm
yum -y install ipset ipvsadm

# 配置ipvsadm模块加载方式,添加需要加载的模块
cat > /etc/sysconfig/modules/ipvs.modules << EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

# 授权、运行、检查是否加载
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules

lsmod | grep -e ip_vs -e nf_conntrack
ip_vs_sh               12288  0
ip_vs_wrr              12288  0
ip_vs_rr               12288  0
ip_vs                 200704  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          188416  1 ip_vs
nf_defrag_ipv6         24576  2 nf_conntrack,ip_vs
nf_defrag_ipv4         12288  1 nf_conntrack
libcrc32c              12288  3 nf_conntrack,xfs,ip_vs

关闭SWAP分区

# 将/etc/fstab文件中swap所在行注掉,然后重启系统,可以永久关闭SWAP分区
sed -i 's&/dev/mapper/centos-swap&#/dev/mapper/centos-swap&' /etc/fstab
cat /etc/fstab | grep swap
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

# 可以临时关闭SWAP分区
swapoff -a

Docker安装

在上面准备的所有节点中操作

# 使用阿里云开源软件镜像站
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看可安装版本
yum list docker-ce.x86_64 --showduplicates | sort -r
# 安装指定版本
yum -y install --setopt=obsoletes=0 docker-ce-20.10.9-3.el7
# 修改docker配置
mkdir /etc/docker
# registry-mirrors为镜像加速器配置,登录阿里云在上面获取;exec-opts为cgroup配置
# Docker 在默认情况下使用Vgroup Driver为cgroupfs,而Kubernetes推荐使用systemd来替代cgroupfs
cat << EOF > /etc/docker/daemon.json
{
  "registry-mirrors": ["https://zwyx2n3v.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

# 设置启动及开机自启动
systemctl enable docker && systemctl start docker
# 查看安装的docker版本
docker version

k8s 1.21.0 集群部署

在上面准备的所有节点中操作

集群软件及版本说明

kubeadmkubeletkubectl
版本1.21.01.21.01.21.0
安装位置集群所有节点集群所有节点集群所有节点
作用初始化集群、管理集群等用于接收api-server指令,对pod生命周期进行管理集群应用命令行管理工具

k8s YUM源准备

阿里云YUM源 developer.aliyun.com/mirror/kube…

cat > /etc/yum.repos.d/kubernetes.repo << EOF 
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

集群软件安装

# 查看指定版本
yum list kubeadm.x86_64 --showduplicates | sort -r
yum list kubelet.x86_64 --showduplicates | sort -r
yum list kubectl.x86_64 --showduplicates | sort -r

# 安装指定版本
yum -y install --setopt=obsoletes=0 kubeadm-1.21.0-0  kubelet-1.21.0-0 kubectl-1.21.0-0

配置kubelet

为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容

sed -ri 's/KUBELET_EXTRA_ARGS=/KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"/' /etc/sysconfig/kubelet

# 设置kubelet为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动
systemctl enable kubelet

集群镜像准备

通过阿里云镜像代理下载对应的镜像
kubeadm config images list --kubernetes-version=v1.21.0
k8s.gcr.io/kube-apiserver:v1.21.0
k8s.gcr.io/kube-controller-manager:v1.21.0
k8s.gcr.io/kube-scheduler:v1.21.0
k8s.gcr.io/kube-proxy:v1.21.0
k8s.gcr.io/pause:3.4.1
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns/coredns:v1.8.0

cat > image_download.sh << "EOF"
#!/bin/bash
images_list='
k8s.gcr.io/kube-apiserver:v1.21.0
k8s.gcr.io/kube-controller-manager:v1.21.0
k8s.gcr.io/kube-scheduler:v1.21.0
k8s.gcr.io/kube-proxy:v1.21.0
k8s.gcr.io/pause:3.4.1
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns/coredns:v1.8.0'
for image in $images_list
do
    # k8s.gcr.io的相关镜像在国内无法访问,需要替换成registry.aliyuncs.com/google_containers
    image_aliyun=`echo $image | sed 's#k8s.gcr.io#registry.aliyuncs.com/google_containers#'`
    # coredns需要做特殊处理,删除coredns/
    image_aliyun=`echo $image_aliyun | sed 's#coredns/##'`
    # 去阿里云拉取对应的镜像
    docker pull $image_aliyun
    # 重新打成k8s.gcr.io命名的镜像
    docker tag $image_aliyun $image
    # 删除阿里云对应的镜像
    docker rmi $image_aliyun
done
EOF

# 执行脚本下载镜像,可能由于网络原因导致一些镜像下载不了,这个脚本可以多执行几次
sh image_download.sh

# 查看下载的镜像
docker images
REPOSITORY                           TAG        IMAGE ID       CREATED       SIZE
k8s.gcr.io/kube-apiserver            v1.21.0    4d217480042e   2 years ago   126MB
k8s.gcr.io/kube-proxy                v1.21.0    38ddd85fe90e   2 years ago   122MB
k8s.gcr.io/kube-controller-manager   v1.21.0    09708983cc37   2 years ago   120MB
k8s.gcr.io/kube-scheduler            v1.21.0    62ad3129eca8   2 years ago   50.6MB
k8s.gcr.io/pause                     3.4.1      0f8457a4c2ec   2 years ago   683kB
k8s.gcr.io/coredns/coredns           v1.8.0     296a6d5035e2   2 years ago   42.5MB
k8s.gcr.io/etcd                      3.4.13-0   0369cf4303ff   3 years ago   253MB
使用 docker playground 下载

labs.play-with-docker.com/

通过docker hub登录

image.png

image.png

image.png

image.png

# 拉取镜像
docker pull k8s.gcr.io/kube-apiserver:v1.21.0
# 输入dockerhub中的用户名和密码登陆
docker login

# 打一个私有仓库的tag
docker tag k8s.gcr.io/kube-apiserver:v1.21.0 zhangjiabao4/kube-apiserver:v1.21.0
# 推送到私有仓库
docker push zhangjiabao4/kube-apiserver:v1.21.0

image.png

image.png

# 测试节点中
# 登录dockerhub
docker login
Log in with your Docker ID or email address to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
You can log in with your password or a Personal Access Token (PAT). Using a limited-scope PAT grants better security and is required for organizations using SSO. Learn more at https://docs.docker.com/go/access-tokens/

Username: zhangjiabao4
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

# 拉取镜像
docker pull zhangjiabao4/kube-apiserver:v1.21.0
v1.21.0: Pulling from zhangjiabao4/kube-apiserver
Digest: sha256:1435e167151f90b7f4abfd416726751c46b8672cc7288507fab7cfa5a05b866c
Status: Downloaded newer image for zhangjiabao4/kube-apiserver:v1.21.0
docker.io/zhangjiabao4/kube-apiserver:v1.21.0

docker images
REPOSITORY                           TAG        IMAGE ID       CREATED       SIZE
zhangjiabao4/kube-apiserver          v1.21.0    4d217480042e   2 years ago   126MB

# 重新打成k8s.gcr.io命名的镜像
docker tag zhangjiabao4/kube-apiserver:v1.21.0 k8s.gcr.io/kube-apiserver:v1.21.0

上面是以kube-apiserver镜像为例,其它的镜像操作类似

集群初始化

# master01
# 输出内容,一定保留,便于后继操作使用
kubeadm init --kubernetes-version=v1.21.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.91.170
[init] Using Kubernetes version: v1.21.0
...
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.91.170:6443 --token 4w2msf.k2sizpdmavfyl89t \
        --discovery-token-ca-cert-hash sha256:91f71d52fd2f42b6fe4c77ec86866c15a50f1c5d3f0f16b51545b940acb8930f

集群应用客户端管理集群文件准备

# master01
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

集群网络准备

使用calico部署集群网络 docs.tigera.io/calico/late…

只需要在master01节点操作

calico安装

先查看calico与k8s的兼容性

image.png

这里安装calico3.23版本 docs.tigera.io/archive/v3.…

image.png

# 下载operator资源清单文件
wget https://projectcalico.docs.tigera.io/archive/v3.23/manifests/tigera-operator.yaml
# 应用资源清单文件,创建operator
kubectl apply -f tigera-operator.yaml
# 监视calico-sysem命名空间中pod运行情况,等待所有pod的STATUS变成Running
watch kubectl get pods -n tigera-operator
# 通过自定义资源方式安装
wget https://projectcalico.docs.tigera.io/archive/v3.23/manifests/custom-resources.yaml
# 修改为使用kubeadm init ----pod-network-cidr对应的IP地址段
sed -i 's/192.168/10.244/' custom-resources.yaml
# 应用资源清单文件
kubectl apply -f custom-resources.yaml
# 监视calico-sysem命名空间中pod运行情况,等待所有pod的STATUS变成Running
watch kubectl get pods -n calico-system
# 删除 master 上的 taint
kubectl taint nodes --all node-role.kubernetes.io/master-

# 已经全部运行
kubectl get pods -n calico-system
NAME                                      READY   STATUS    RESTARTS   AGE
calico-kube-controllers-988c95d46-r95mj   1/1     Running   0          5m57s
calico-node-vg5sl                         1/1     Running   0          5m57s
calico-typha-6564cc4945-d2rzp             1/1     Running   0          5m57s

# 查看kube-system命名空间中coredns状态,处于Running状态表明联网成功。
kubectl get pods -n kube-system
NAME                               READY   STATUS    RESTARTS   AGE
coredns-558bd4d5db-9v4bk           1/1     Running   0          7m55s
coredns-558bd4d5db-bdcvx           1/1     Running   0          7m55s
etcd-master01                      1/1     Running   0          8m10s
kube-apiserver-master01            1/1     Running   0          8m10s
kube-controller-manager-master01   1/1     Running   0          8m10s
kube-proxy-vlgrk                   1/1     Running   0          7m55s
kube-scheduler-master01            1/1     Running   0          8m10s
calico客户端安装

image.png

image.png

# 下载二进制文件
curl -L https://github.com/projectcalico/calico/releases/download/v3.23.5/calicoctl-linux-amd64 -o calicoctl
# 安装calicoctl
mv calicoctl /usr/bin/
# 为calicoctl添加可执行权限
chmod +x /usr/bin/calicoctl
# 查看calicoctl版本
calicoctl  version
Client Version:    v3.23.5
Git commit:        9e0398360
Cluster Version:   v3.23.5
Cluster Type:      typha,kdd,k8s,operator,bgp,kubeadm

# 通过~/.kube/config连接kubernetes集群,查看已运行节点
DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl get nodes
NAME
master01

集群工作节点添加

因容器镜像下载较慢,可能会导致报错,主要错误为没有准备好cni(集群网络插件),如有网络,请耐心等待即可

# 在worker01 和 worker02 节点执行
kubeadm join 192.168.91.170:6443 --token 4w2msf.k2sizpdmavfyl89t \
        --discovery-token-ca-cert-hash sha256:91f71d52fd2f42b6fe4c77ec86866c15a50f1c5d3f0f16b51545b940acb8930f
...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

# master01
# 查看网络节点是否添加
DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl get nodes
NAME
master01
worker01
worker02

验证集群可用性

# master01
# 监视calico-sysem命名空间中pod运行情况,等待所有pod的STATUS变成Running
watch kubectl get pods -n calico-system
# 查看所有的节点
kubectl get nodes
NAME       STATUS   ROLES                  AGE     VERSION
master01   Ready    control-plane,master   14m     v1.21.0
worker01   Ready    <none>                 4m13s   v1.21.0
worker02   Ready    <none>                 4m13s   v1.21.0

# 查看集群健康情况
# 理想状态
kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok
scheduler            Healthy   ok
etcd-0               Healthy   {"health":"true"}

# 真实情况
kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS      MESSAGE                                                                                       ERROR
controller-manager   Unhealthy   Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused
scheduler            Unhealthy   Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused
etcd-0               Healthy     {"health":"true"}

# 查看kubernetes集群pod运行情况
kubectl get pods -n kube-system
NAME                               READY   STATUS    RESTARTS   AGE
coredns-558bd4d5db-9v4bk           1/1     Running   0          15m
coredns-558bd4d5db-bdcvx           1/1     Running   0          15m
etcd-master01                      1/1     Running   0          15m
kube-apiserver-master01            1/1     Running   0          15m
kube-controller-manager-master01   1/1     Running   0          15m
kube-proxy-hks9q                   1/1     Running   0          5m1s
kube-proxy-jttr8                   1/1     Running   0          5m1s
kube-proxy-vlgrk                   1/1     Running   0          15m
kube-scheduler-master01            1/1     Running   0          15m

# 查看calico-system命名空间中pod运行情况
kubectl get pods -n calico-system
NAME                                      READY   STATUS    RESTARTS   AGE
calico-kube-controllers-988c95d46-r95mj   1/1     Running   0          13m
calico-node-68876                         1/1     Running   0          5m22s
calico-node-pj65l                         1/1     Running   0          5m22s
calico-node-vg5sl                         1/1     Running   0          13m
calico-typha-6564cc4945-d2rzp             1/1     Running   0          13m
calico-typha-6564cc4945-wkz2g             1/1     Running   0          5m18s