CKAD认证中部署k8s并配置Calico插件

 更新时间:2022年03月31日 10:45:55   作者:痴者工良  
这篇文章介绍了CKAD认证中部署k8s并配置Calico插件的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

预设网络

Calico(https://github.com/projectcalico/calico) 是针对容器、虚拟机和裸机工作负载的开源网络和安全解决方案,它提供了 pod 之间的网络连接和网络安全策略实施。

读者可参考 https://kubernetes.io/zh/docs/concepts/cluster-administration/networking/ 这里不做过多的说明。

执行 ip addr 命令,找到 ens4,把里面提到的 ip 记录下来。

ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000
    link/ether 42:01:0a:aa:00:02 brd ff:ff:ff:ff:ff:ff
    inet 10.170.0.2/32 scope global dynamic ens4
       valid_lft 2645sec preferred_lft 2645sec
    inet6 fe80::4001:aff:feaa:2/64 scope link 
       valid_lft forever preferred_lft forever

则 ip 是 10.170.0.2。

然后修改 /etc/hosts 文件,加上一行(替换这个ip为你的):

10.170.0.2      k8smaster

后面我们访问集群,使用 k8smaster,而且不是使用 ip 直接访问。

kubeadm 安装 k8s

执行 kubectl version 查看 k8s 版本,GitVersion:"v1.21.0" 表示的即为 k8s 版本,因为工具版本跟 k8s 版本一致。

创建一个 kubeadm-config.yaml 文件,我们使用 kubeadm init 时,通过此配置文件出初始化 k8s master。

文件内容为:

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubenetesVersion: 1.21.0
controlPlaneEndpoint: "k8smaster:6443"
networking:
    podSubnet: 192.168.0.0/16

注意,: 后面必须带一个空格。表示key: value

例如 image: nginx:letest ,不带空格的 : 会连在一起。

然后初始化 master:

kubeadm init --config=kubeadm-config.yaml --upload-certs --v=5 | tee kubeadm-init.out

这个语句可以省略为 kubeadm init --config=kubeadm-config.yaml --upload-certs

--v=5 可以输出更多信息信息,tee xxx 可以让信息输出到一个文件中,方便收集日志或者后续检查。

执行初始化命令后,终端或查看 kubeadm-init.out 文件,有以下内容:

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/

You can now join any number of the control-plane node running the following command on each as root:

  kubeadm join k8smaster:6443 --token 45td1j.xqdscm4k06a4edi2 \
	--discovery-token-ca-cert-hash sha256:aeb772c57a35a283716b65d16744a71250bcc25d624010ccb89090021ca0f428 \
	--control-plane --certificate-key d76287ccc4701db9d34e0c9302fa285be2e9241fc43c94217d6beb419cdf3c52

Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.

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

kubeadm join k8smaster:6443 --token 45td1j.xqdscm4k06a4edi2 \
	--discovery-token-ca-cert-hash sha256:aeb772c57a35a283716b65d16744a71250bcc25d624010ccb89090021ca0f428 

按照提示,我们执行:

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

然后:

export KUBECONFIG=/etc/kubernetes/admin.conf

笔者注:KUBECONFIG 环境变量在下次登录或新建终端窗口会失效,打开 用户目录的.bashrc 文件,在最后面加上 export KUBECONFIG=/etc/kubernetes/admin.conf ,可保证下次登录或切换终端,依然可用。

笔者注:因为涉及到多用户,所以如果切换用户,就不能使用 kubeadm/kubectl/kubelet 命令了,如果读者切换了用户,则可以执行上面 make -p $HOME/.kube到 export xxx 这两部分的命令,这样别的用户也可以执行命令操作节点。

输入 kubeadm config print init-default 可以查看到 master 是初始化的配置。

配置 calico

然后下下载 calico 的 yaml 文件。

wget https://docs.projectcalico.org/manifests/calico.yaml

然后我们需要留意 yaml 文件中的 CALICO_IPV4POOL_CIDR 的值,读者直接打开 https://docs.projectcalico.org/manifests/calico.yaml 或者使用 less calico.yaml 在终端上阅读文件。

找到 CALICO_IPV4POOL_CIDR 例如:

         # - name: CALICO_IPV4POOL_CIDR
            #   value: "192.168.0.0/16"

这个表示 ip4 池,如果 ip 不存在,则会自动创建,创建 的 pod 的网络 ip 会在这个范围。默认是 192.168.0.0 我们不需要改,如果你需要定制,则可以删除 # ,然后改动 ip。

然后我们启用 calico 网络插件:

kubectl apply -f calico.yaml

自动补全工具

kubectl 命令和可选参数非常多,每次都要敲长长的命令,任意出错,我们可以利用 bash-completion 为我们快速完成命令的输入。

sudo apt-get install bash-completion -y
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> $HOME/.bash

我们可以测试一下。

输入 kubectl des ,然后按一下 TAB 键,会发现内容自动补全。

输入完整的 kubectl descibe nodes 可以查到 node 状态,后面的小节再聊聊 descibe nodes 的含义。

状态描述

执行 kubectl descibe nodes 命令,我们可以看到节点详细的信息,其中有个 Conitions 字段,描述了所有正在运行中(Running) 的节点的状态,它有 5 个类型:

  • Ready

    Node 是否能够接收 pod ,如果可以则 Status 为 True;如果节点不健康,不能接收 pod,则 为 False。正常情况下为 True。

  • DiskPressure

    表示节点的空闲空间不足以用于添加新 Pod,如果为 True则说明不正常。

  • MemoryPressure

    表示节点存在内存压力,即节点内存可用量低,如果为 True 则说明不正常。

  • PIDPressure

    表示节点存在进程压力,即节点上进程过多;如果为 True 则说明不正常。

  • NetworkUnavailable

    表示节点网络配置不正确;如果为 True,则说明不正常。

使用 json 表示:

"conditions": [
  {
    "type": "Ready",
    "status": "True",
    "reason": "KubeletReady",
    "message": "kubelet is posting ready status",
    "lastHeartbeatTime": "2019-06-05T18:38:35Z",
    "lastTransitionTime": "2019-06-05T11:41:27Z"
  }
]

到此这篇关于CKAD认证中部署k8s并配置Calico插件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Kubernetes控制节点的部署

    Kubernetes控制节点的部署

    这篇文章介绍了Kubernetes控制节点的部署,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • CentOS 出现no space left on device错误解决办法

    CentOS 出现no space left on device错误解决办法

    这篇文章主要介绍了CentOS 出现no space left on device错误解决办法的相关资料,需要的朋友可以参考下
    2017-04-04
  • Kubernetes controller manager运行机制源码解析

    Kubernetes controller manager运行机制源码解析

    这篇文章主要为大家介绍了Kubernetes controller manager运行机制源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Kubernetes中Deployment的升级与回滚

    Kubernetes中Deployment的升级与回滚

    这篇文章介绍了Kubernetes中Deployment的升级与回滚 ,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Minikube搭建Kubernetes集群

    Minikube搭建Kubernetes集群

    这篇文章介绍了Minikube搭建Kubernetes集群的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • Docker与K8s关系介绍不会Docker也可以使用K8s

    Docker与K8s关系介绍不会Docker也可以使用K8s

    想学K8s,必须得先学会Docker吗?这是很多网友在开始有想法想要学 K8s的时候都会冒出来的想法,要回答这个问题,我们需要先搞清楚 Docker 和 K8s 他们的角色是什么,相互之间是什么关系
    2022-06-06
  • Kubernetes(K8S)容器集群管理环境完整部署详细教程-上篇

    Kubernetes(K8S)容器集群管理环境完整部署详细教程-上篇

    本系列文章主要介绍了Kubernetes(K8S)容器集群管理环境完整部署的详细教程,分为上中下三篇文章,此为上篇,需要的朋友可以参考下
    2022-01-01
  • kubernetes实现分布式限流

    kubernetes实现分布式限流

    这篇文章介绍了kubernetes实现分布式限流的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • k8s集群部署时etcd容器不停重启问题以及处理详解

    k8s集群部署时etcd容器不停重启问题以及处理详解

    一次在k8s集群中创建实例发现etcd集群状态出现连接失败状况,导致创建实例失败,下面这篇文章主要给大家介绍了关于k8s集群部署时etcd容器不停重启问题以及处理的相关资料,需要的朋友可以参考下
    2023-01-01
  • Dashboard管理Kubernetes集群与API访问配置

    Dashboard管理Kubernetes集群与API访问配置

    这篇文章介绍了Dashboard管理Kubernetes集群与API访问配置的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04

最新评论