CKAD认证中的部署教程

简介: CKAD认证中的部署教程

部署


预设网络


本节主要是配置 hosts 文件,在后续配置中,通过主机名称即可快速连接,而不需要每次都打上 IP 地址。


我们在 Master 节点服务器执行 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。或者使用 hostname -i 查询。方式有很多,目前是获得主机的内网 IP。


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

10.170.0.2      k8smaster


后面我们访问集群,使用 k8smaster 这个主机名称(域名),而且不是需要 IP 地址,使用主机名称方便记忆,也避免了 IP 强固定。


kubeadm 安装 k8s


这里的部署过程跟上一章中的有所差异,因为上章中,直接使用 kubeadm init 进行初始化集群,没有配置更多细节。


执行 kubectl version 查看 k8s 版本,找到这段GitVersion:"v1.21.0" ,即为 Kubernetes 版本。


创建一个 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


按照提示,我们逐个执行下面的命令,不要一次性粘贴执行,因为 cp -i 表示要你输入 y/n 确认更改,一次性粘贴会导致跳过(把 -i 改为 -f 也行)。


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/.kubeexport xxx 这两部分的命令,这样别的用户也可以执行命令操作节点。


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

以上便是 CKAD 官方的部署方法。


配置 Calico


什么是 CNI


CNI 意为容器网络接口,是 Kubernetes 的一种标准设计,使用者可以不需要关注使用了何种网络插件,可以在插件或销毁容器时更加容易地配置网络。


Kubernetes 中有 Flannel、Calico、Weave 等主流的插件,在上一篇中,我们部署 Kubernetes 网络时,使用了 Weave,而在本章中,我们将使用 Calico 来部署网络。

对于 CNI ,后面的章节会深入学习。


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


Flannel、Calico、Weave 都是常用的 Kubernetes 网络插件,读者可参考 https://kubernetes.io/zh/docs/concepts/cluster-administration/networking/ 这里不做过多的说明。


首先下载 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。

[Error] 提示

请务必根据你集群中的 IP 段,配置此参数。

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

kubectl apply -f calico.yaml

当网络配置完成后,即可使用 kubeadm join 加入节点。


其它


在节点上执行命令


如果我们在 Worker 节点上执行命令,会发现:

root@instance-2:~# kubectl describe nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?


首先在 Master 节点中,下载 /etc/kubernetes/admin.conf 文件,或者复制文件内容,到 Worker 节点中。


将文件上传或复制到 Worker 节点的 /etc/kubernetes/admin.conf 文件,执行配置即可。


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


export KUBECONFIG=/etc/kubernetes/admin.conf


echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> $HOME/.bashrc


自动补全工具


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


sudo apt-get install bash-completion -y


source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> $HOME/.bashrc


当我们敲命令时,按下 TAB 键,会自动补全。

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


状态描述


执行 kubectl describe 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 网络插件,跟上一篇的内容比较,主要是通过 yaml 文件去控制创建 kubernetes 集群,两章的部署过程一致,只是网络插件有所不同。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
设计模式 Java
110.【十万字带你深入学习23种设计模式】(二十六)
110.【十万字带你深入学习23种设计模式】
113 1
|
监控 Java 测试技术
性能工具之 nGrinder 入门安装及使用
【5月更文挑战第1天】性能工具之 nGrinder 入门安装及使用
265 5
性能工具之 nGrinder 入门安装及使用
|
设计模式 开发框架 算法
万字详解常用设计模式(2)
模板方法模式是一种行为型设计模式,它定义一个操作(模板方法)的基本组合与控制流程,将一些步骤(抽象方法)推迟到子类中,在使用时调用不同的子类,就可以达到不改变一个操作的基本流程情况下,即可修改其中的某些特定步骤。这种设计方式将特定步骤的具体实现与操作流程分离开来,实现了代码的复用和扩展,从而提高代码质量和可维护性。
104 0
|
API 开发工具 Android开发
简述大疆无人机对接
【2月更文挑战第7天】本文介绍了对接大疆无人机的主要目的,包括实时画面获取、飞行数据监测、操控飞行、媒体管理和业务功能开发等,并列举了多种开发接口如MobileSDK、UXSDK、云开发API等。重点讨论了MobileSDK在Android平台的应用,包括SDK集成步骤、直播推流和获取飞机实时数据的细节。另外,UXSDK用于加速应用开发,提供预设UI组件。上云API则简化了无人机与第三方云平台的集成,支持MQTT、HTTPS和WebSocket协议,适用于行业级无人机。对接流程涉及Pilot2和Dock的配置,以及数据传输和业务功能处理。文章还提及了如何对接多个飞机的方法。
9357 0
简述大疆无人机对接
|
JavaScript
在Vue中,什么是Watcher?它和生命周期钩子函数有什么关系?
在Vue中,什么是Watcher?它和生命周期钩子函数有什么关系?
151 1
|
SQL 存储 网络协议
IPv6地域信息查询优化
集团内部数据资产团队维护了IPv6相关的地域数据,同时也提供了SDK查询特定IPv6的地域信息(参考语雀文档全球IP图谱SDK使用说明)。我在mac机器上进行了相关的随机查询测试(总次数1000万次),mmap的内存模式平均耗时为3us左右(1000万次查询总耗时30.2s),其性能和他们之前做的性能测试报告基本一致。对于大部分查询场景,这个性能基本能够满足需求。但对于SLS SQL的场景,单次查
IPv6地域信息查询优化
|
前端开发
服装商城电商-前端网页技术精美完整源码HTML+CSS+JS
服装商城电商-前端网页技术精美完整源码HTML+CSS+JS
服装商城电商-前端网页技术精美完整源码HTML+CSS+JS
|
机器学习/深度学习 算法 数据挖掘
一文速览机器学习的类别(Python代码)
一文速览机器学习的类别(Python代码)
|
前端开发
bootstrap如何去除自带的样式----导航栏中的菜单实现平滑的过渡到对应的菜单区域-------动态跟换模态框中的内容
bootstrap如何去除自带的样式----导航栏中的菜单实现平滑的过渡到对应的菜单区域-------动态跟换模态框中的内容