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 相关文章推荐
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
Jun 21 Servers
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
Mar 31 Servers
解决Nginx 配置 proxy_pass 后 返回404问题
Mar 31 Servers
nginx结合openssl实现https的方法
Jul 25 Servers
Nginx+Tomcat负载均衡集群的实现示例
Oct 24 Servers
Nginx禁止ip访问或非法域名访问
Apr 07 Servers
Windows Server 2016 配置 IIS 的详细步骤
Apr 28 Servers
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
Jun 01 Servers
openEuler 搭建java开发环境的详细过程
Jun 10 Servers
Python安装及建立虚拟环境的完整步骤
Jun 25 Servers
Zabbix对Kafka topic积压数据监控的问题(bug优化)
Jul 07 Servers
教你使用Ubuntu搭建DNS服务器
Sep 23 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
改变Apache端口等配置修改方法
2008/06/05 PHP
php 时间计算问题小结
2009/01/04 PHP
php用户注册页面利用js进行表单验证具体实例
2013/10/17 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
Python模拟登陆实现代码
2017/06/14 Python
python shell根据ip获取主机名代码示例
2017/11/25 Python
Python实现迭代时使用索引的方法示例
2018/06/05 Python
flask框架视图函数用法示例
2018/07/19 Python
使用Django连接Mysql数据库步骤
2019/01/15 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
Python 复平面绘图实例
2019/11/21 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
python定义具名元组实例操作
2021/02/28 Python
幼儿园教师培训方案
2014/02/04 职场文书
单位承诺书格式
2014/05/21 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
亲戚关系证明
2015/06/24 职场文书
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers