浅入Kubernetes(6):CKAD认证中的部署教程
目前为止,笔者已经写了 5 篇关于 k8s 的文章,这一篇笔者将介绍 CKAD 认证官方课程中,如何部署 k8s 节点。
在上一篇中,已经介绍了 kubeadm 如何部署 k8s ,而且 kubeadm 是官方默认推荐的工具,所以读者可以先阅读 《浅入kubernetes(5):尝试kubeadm》
https://www.cnblogs.com/whuanle/p/14679590.html
或
https://www.whuanle.cn/archives/1230
根据上一篇文章的内容,安装好 kubeadm、kubectl、kubelet 、docker。注:docker 版本不能为 20.x!
kubeadm:用来初始化集群的指令。kubelet:在集群中的每个节点上用来启动 Pod 和容器等。kubectl:用来与集群通信的命令行工具。
预设网络
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"
}
]
可参考:https://kubernetes.io/zh/docs/concepts/architecture/nodes/
本篇内容主要介绍了 CKAD 认证中要求掌握的 kubeadm 部署 k8s 、配置启动 Calico 网络插件。
浅入Kubernetes(6):CKAD认证中的部署教程的更多相关文章
- CKAD认证中的部署教程
在上一章中,我们已经学会了使用 kubeadm 创建集群和加入新的节点,在本章中,将按照 CKAD 课程的方法重新部署一遍,实际上官方教程的内容不多,笔者写了两篇类似的部署方式,如果已经部署了 kub ...
- 浅入Kubernetes(10):控制节点的部署,选择器、亲和性、污点
目录 标签和nodeSelector 标签选择 亲和性和反亲和性 污点和容忍度 系统默认污点 容忍度 DaemonSet 在前面的学习中,我们学到了 Deployment 部署,以及副本数(Repli ...
- 浅入Kubernetes(8):外网访问集群
目录 查询 Service Service 外部服务类型 配置 ServiceType 伸缩数量 阶段总结 在前面几篇文章中,我们学习了 kubeadm .kubectl 的一些命令,也学会了 Dep ...
- 浅入Kubernetes(7):应用部署实例,Deployment、Service、ReplicaSet
目录 Deployment 创建 Deployment kubectl apply/create 网络端口映射和更新 Deployment ReplicaSet 在本文之前,你需要阅读: 尝试 kub ...
- 浅入Kubernetes(11):了解 Service 和 Endpoint
目录 Srevice Service 的创建及现象 Service 定义 Endpoint slices 创建 Endpoint.Service Service 创建应用 创建 Endpoint 浅入 ...
- 『浅入深出』MySQL 中事务的实现
在关系型数据库中,事务的重要性不言而喻,只要对数据库稍有了解的人都知道事务具有 ACID 四个基本属性,而我们不知道的可能就是数据库是如何实现这四个属性的:在这篇文章中,我们将对事务的实现进行分析,尝 ...
- 浅入kubernetes(1):Kubernetes 入门基础
目录 Kubernetes 入门基础 Introduction basic of kubernetes What Is Kubernetes? Components of Kubernetes Kub ...
- 浅入kubernetes(2):Kubernetes 的组成
目录 说明 Kubernetes集群的组成 What are containerized applications? What are Kubernetes containers? What are ...
- 浅入kubernetes(5):尝试kubeadm
本篇介绍利用 kubernetes 的命令行工具,快速创建集群实例,完成 hello world 实践. 上一篇试用 minikube 去搭建集群,这一篇将介绍通过 kubeadm 去操作. 命令行工 ...
随机推荐
- Spring 中的 MetaData 接口
什么是元数据(MetaData) 先直接贴一个英文解释: Metadata is simply data about data. It means it is a description and co ...
- spring boot插件开发实战和原理
本文转载自spring boot插件开发实战和原理 实战:编写spring boot插件 为什么要编写boot插件 因为我们在开发的时候需要提供一些共同的功能,所以我们编写个共同的jar包.开发人员在 ...
- Elasticsearch简介、倒排索引、文档基本操作、分词器
lucene.Solr.Elasticsearch 1.倒排序索引 2.Lucene是类库 3.solr基于lucene 4.ES基于lucene 一.Elasticsearch 核心术语 特点: 1 ...
- 搭建Elasticsearch可视化界面 Kibana
前言 每一个版本的es都有一个对应的Kibana版本,建议和es相同版本,官网地址: 点击进入下载地址 步骤 1.解压 tar -zxvf kibana-7.2.0-linux-x86_64 2.修改 ...
- SpringBoot(二): SpringBoot属性配置文件 SpringBoot多环境配置文件 SpringBoot自定义配置文件
1.属性配置文件 一共分为两种,一种是键值对的properties属性配置文件,一种是yaml格式的配置文件 properties配置: 2.多环境配置文件 当我们的项目中有多套配置文件 比如开发的配 ...
- 后端程序员之路 8、一种内存kv数据库的实现
键值(Key-Value)存储数据库,这是一种NoSQL(非关系型数据库)模型,其数据按照键值对的形式进行组织.索引和存储.KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘 ...
- C# 处理PPT水印(三)—— 在PPT中添加多行(平铺)文本水印效果
在PPT幻灯片中,可通过添加形状的方式,来实现类似水印的效果,可添加单一文本水印效果,即幻灯片中只有一个文本水印:也可以添加多行(平铺)文本水印效果,即幻灯片中以一定方式平铺排列多个文本水印效果.本文 ...
- POJ-2195(最小费用最大流+MCMF算法)
Going Home POJ-2195 这题使用的是最小费用流的模板. 建模的时候我的方法出现错误,导致出现WA,根据网上的建图方法没错. 这里的建图方法是每次到相邻点的最大容量为INF,而花费为1, ...
- CVE-2020-1938 -Tomcat-AJP任意文件读取/包含
为什么这个漏洞被称作 Ghostcat(幽灵猫)? 这个漏洞影响全版本默认配置下的 Tomcat(在我们发现此漏洞的时候,确认其影响 Tomcat 9/8/7/6 全版本,而年代过于久远的更早的版本未 ...
- R绘图(3): 散点图添加文本注释
这里以火山图为例进行说明,在转录组分析中,火山图是很常见的一类图,纵轴表示p_value,横轴表示log (fold change).单一的散点图绘制很简单,火山图比较难处理的地方就是一些基因的注释, ...