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


Posted in Servers onMarch 31, 2022

预设网络

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插件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Servers 相关文章推荐
Nginx的rewrite模块详解
Mar 31 Servers
Nginx下配置Https证书详细过程
Apr 01 Servers
nginx的zabbix 5.0安装部署的方法步骤
Jul 16 Servers
学习nginx基础知识
Sep 04 Servers
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
Apr 07 Servers
Docker下安装Oracle19c
Apr 13 Servers
Windows Server 2016 配置 IIS 的详细步骤
Apr 28 Servers
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
Apr 29 Servers
openEuler 搭建java开发环境的详细过程
Jun 10 Servers
zabbix如何添加监控主机和自定义监控项
Aug 14 Servers
教你使用Ubuntu搭建DNS服务器
Sep 23 Servers
CentOS7设置ssh服务以及端口修改方式
Dec 24 Servers
使用kubeadm命令行工具创建kubernetes集群
Mar 31 #Servers
Minikube搭建Kubernetes集群
Apache Pulsar结合Hudi构建Lakehouse方案分析
Apache Hudi的多版本清理服务彻底讲解
Z-Order加速Hudi大规模数据集方案分析
Mar 31 #Servers
深入解析Apache Hudi内核文件标记机制
Apache Hudi数据布局黑科技降低一半查询时间
You might like
PHPWind 发帖回帖Api PHP版打包下载
2010/02/08 PHP
PHP Stream_*系列函数
2010/08/01 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
php 获取页面中指定内容的实现类
2014/01/23 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
JS弹出对话框返回值代码(asp.net后台)
2010/12/28 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
IE浏览器不支持getElementsByClassName的解决方法
2014/08/27 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
python爬虫中get和post方法介绍以及cookie作用
2018/02/08 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
Django框架封装外部函数示例
2019/05/28 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
Python气泡提示与标签的实现
2020/04/01 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
CSS3 实现的加载动画
2020/12/07 HTML / CSS
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
就业协议书范本
2014/04/11 职场文书
文明工地标语
2014/06/16 职场文书
社区党的群众路线教育实践活动总结材料
2014/10/31 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
python pygame入门教程
2021/06/01 Python
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python