提示:本文内容95%源于https://www.cnblogs.com/shoufu/p/13047723.html

K8S实战Day4-Kubeadm的安装及原理

  • 前言
  • 集群安装
  • Kubeadm Init的工作流程
    • 1.Prefligth Checks 检查
    • 2.生成自签证书
    • 3.生成其他组件访问 kube-apiserver 所需要的配置文件
    • 4.为 Master 组件生成 Pod 配置文件
    • kubeadm join的原理

前言

二进制安装对于新手来说是比较头疼的问题,所以我们先来学习如何用Kubeadm来安装,以及Kubeadm部署的原理

集群安装

kubelet 是 kubernetes 项目用来操作 Docker 等容器运行时的核心组件,在每个节点上都存在,可以除了跟容器运行时打交道外,kubelet 在配置容器网络、管理容器数据卷时,都需要直接操作宿主机。
容器化部署的时候会有一个很大的问题,如何容器化 kubelet?
如果 kubelet 本身就运行在一个容器里,那么直接操作宿主机就会变得很麻烦。比如让 kubelet 隔着容器的 Mount Namespace 和文件系统,操作宿主机的文件系统,就会有困难。
因此为了解决上面这个问题,kubeadm 选择:
把 kubelet 直接部署在宿主机上,然后使用容器部署其他的 kubernetes组件
所以使用Kubeadm安装集群的第一步就是安装 kubeadm、kubelet 和 kubectl 这三个二进制文件
然后

systemctl enable kubelet

然后创建 kubeadm 配置文件,指定集群信息,比如:

cat > kubeadm-config.yaml <<-'EOF'apiVersion: kubeadm.k8s.io/v1alpha2
kind: MasterConfiguration
kubernetesVersion: v1.14.0
api:advertiseAddress: 192.168.8.170bindPort: 6443...
etcd:local:dataDir: /var/lib/etcdimage: ""
imageRepository: k8s.gcr.io
kubeProxy:config:bindAddress: 0.0.0.0...
kubeletConfiguration:baseConfig:address: 0.0.0.0...
networking:dnsDomain: cluster.localpodSubnet: ""serviceSubnet: 10.96.0.0/12
nodeRegistration:criSocket: /var/run/dockershim.sock...
EOF

Kubeadm Init的工作流程

1.Prefligth Checks 检查

  • Linux 内核的版本必须是否是 3.10以上? Linux Cgroups 模块是否可用 机器的 hostname 是否标准?在
    Kubernetes 项目里,机器的名字以及一切存储在 Etcd 中的 API 对象,都必须使用标准的 DNS 命名(RFC 1123)。
    用户安装的 kubeadm 和 kubelet 的版本是否匹配? 机器上是不是已经安装了 Kubernetes 的二进制文件?
    Kubernetes 的工作端口 10250/10251/10252 端口是不是已经被占用? ip、mount 等 Linux
    指令是否存在? Docker 是否已经安装? Docker 和 kubelet 使用的驱动程序是否相同 代码如下(示例):

2.生成自签证书

检查通过之后,kubeadm 会为你生成 kubernetes对外提供服务所需的各种证书和对应的目录。

kubernetes 对外提供服务时,除非专门开启“不安全模式”,否则都要通过 HTTPS 才能访问 Kube-apiserver。这就需要为 Kubernetes 集群配置好证书文件。

kubeadm 为 Kubernetes 项目生成的证书文件都放在 Master 节点的 /etc/kubernetes/pki 目录下。在这个目录下,最主要的证书文件是 ca.crt 和对应的私钥 ca.key

当然这些证书也可以选择手动生成然后Copy到对应目录

3.生成其他组件访问 kube-apiserver 所需要的配置文件

ls /etc/kubernetes/*.conf
/etc/kubernetes/admin.conf  /etc/kubernetes/controller-manager.conf  /etc/kubernetes/kubelet.conf  /etc/kubernetes/scheduler.conf

这些文件里面记录的是,当前 Master 节点的服务器地址、监听端口。证书目录等信息。这样,对应的客户端(比如 scheduler,kubelet 等),可以直接加载相应的文件,使用里面的信息与 kube-apiserver建立安全连接

4.为 Master 组件生成 Pod 配置文件

在 Kubernetes 中,有一种特殊的容器启动方法叫做“Static Pod”。它允许你把要部署的 Pod 的 YAML 文件放在一个指定的目录里。这样,当这台机器上的 kubelet 启动时,它会自动检查这个目录,加载所有的 Pod YAML 文件,然后在这台机器上启动它们。

从这一点也可以看出,kubelet 在 Kubernetes 项目中的地位非常高,在设计上它就是一个完全独立的组件,而其他 Master 组件,则更像是辅助性的系统容器。

cd /etc/kubernetes/manifests
├── etcd.yaml
├── kube-apiserver.yaml
├── kube-controller-manager.yaml
└── kube-scheduler.yaml

然后 kubeadm 会调用 kubelet 运行这个 yml 文件,等到 Master 容器启动后,kubeadm 会通过检查localhost:6443/healthz 这个 Master 组件的健康检查 url,等待 Master 组件完全运行起来。

kubeadm 就会为集群生成一个 bootstrap token。在后面,只要持有这个 token,任何一个安装了 kubelet 和 kubadm 的节点,都可以通过 kubeadm join 加入到这个集群当中。

这个 token 的值和使用方法,会在 kubeadm init 结束后被打印出来。

在 token 生成之后,kubeadm 会将 ca.crt 等 Master 节点的重要信息,通过 ConfigMap 的方式保存在 Etcd 当中,供后续部署 Node 节点使用。这个 ConfigMap 的名字是 cluster-info。

kubeadm init 的最后一步,就是安装默认插件。Kubernetes 默认 kube-proxy 和 DNS 这两个插件是必须安装的。它们分别用来提供整个集群的服务发现和 DNS 功能。其实,这两个插件也只是两个容器镜像而已,所以 kubeadm 只要用 Kubernetes 客户端创建两个 Pod 就可以了

kubeadm join的原理

任何一台机器想要成为 Kubernetes 集群中的一个节点,就必须在集群的 kube-apiserver 上注册。可是,要想跟 apiserver 打交道,这台机器就必须要获取到相应的证书文件(CA 文件)。可是,为了能够一键安装,我们就不能让用户去 Master 节点上手动拷贝这些文件。

所以,kubeadm 至少需要发起一次“不安全模式”的访问到 kube-apiserver,从而拿到保存在 ConfigMap 中的 cluster-info(它保存了 APIServer 的授权信息)。而 bootstrap token,扮演的就是这个过程中的安全验证的角色。

只要有了 cluster-info 里的 kube-apiserver 的地址、端口、证书,kubelet 就可以以“安全模式”连接到 apiserver 上,这样一个新的节点就部署完成了。

接下来,你只要在其他节点上重复这个指令就可以了

Kubeadm原理](https://www.cnblogs.com/shoufu/p/13047723.html)

K8S-Kubeadm的安装及原理相关推荐

  1. K8S V1.23 安装--Kubeadm+contained+公网 IP 多节点部署

    简介 基于两台公网的服务器节点,两个服务器不再局域网内,只能通过公网 IP 相互访问,搭建 K8S 集群,并且按照 Dashboard,通过网页查看 K8S 相关的东西 环境及机器说明 两台机器,其中 ...

  2. k8s集群部署方式(kubeadm方式安装k8s)

    说明:部分操作请先看报错说明,在进行操作!! 环境准备(1. centos7.7操作系统配置) #--------------------------------------------------- ...

  3. Kubernetes Kubeadm init 与 join 原理分析

    一.kubeadm概述 kubeadm是社区维护的Kubernetes集群一键部署利器,使用两条命令即可完成k8s集群中master节点以及node节点的部署,其底层原理是利用了k8s TLS boo ...

  4. K8s系列之:网络原理

    K8s系列之:网络原理 一.K8s网络模型 二.Docker的网络模型 三.网络的命名空间 1.网络命名空间的实现 2.网络命名空间的操作 3.网络命名空间的一些技巧 四.Veth设备对 1.Veth ...

  5. kubeadm方式安装kubernetes

    一.kubenetes搭建方式有三种:         1.minikube (通常在测试环境使用,不要在生产环境中使用)         2.kubeadm (是一种快速部署kubernetes的方 ...

  6. K8s(Kubernetes)虚拟机安装

    K8s(Kubernetes) 虚拟机安装 系统设置 1.关闭防火墙 2.关闭Selinux 3.关闭Swap分区 4.时间同步 服务器架构 1.服务器架构图 2.设置主机名 3.桥接设置 4.Mas ...

  7. k8s+kubeedge+sedna安装全套流程+避坑指南+解决办法

    最近在学习边缘计算要用到kubeedge,安装了好多次总会遇到各种各样的问题,因此在这里一一列出,以方便下次安装.则里面可能出错的地方太多,如果有问题,请私信联系. 一.环境准备 节点 IP 环境 软 ...

  8. 搭建 K8S 环境:Centos7安装生产环境可用的K8S集群图文教程指南

    搭建 K8S 环境:Centos7安装生产环境可用的K8S集群图文教程指南 一. K8S 简介 二. K8S 学习的几大拦路虎 2.1 K8S 安装对硬件要求比较高 2.2. K8S 对使用者来说要求 ...

  9. pxe网络安装操作系统 原理与详细过程

    1.操作系统安装的流程 通用流程:首先,bios启动,选择操作系统的启动(安装)模式(此时,内存是空白的),然后根据相关的安装模式,寻找操作系统的引导程序(不同的模式,对应不同的引导程序当然也对应着不 ...

  10. g hub安装失败_树莓派k8s集群安装mysql及监控

    安装准备 树莓派k8s集群 root@pi4-master01:~# kubectl get nodes -o wideNAME STATUS ROLES AGE VERSION INTERNAL-I ...

最新文章

  1. 2021年回顾与展望
  2. the Determine in June
  3. linux 更改mysql的数据库目录
  4. php 解决json_encode中文UNICODE转码问题
  5. SpringBoot编写HelloWorld-new
  6. java简述垃圾回收原理及算法_Java垃圾回收原理和算法
  7. java的算术表达式程序,java计算数学表达式
  8. linux下搭建svn版本控制软件
  9. ResNet 运行在Cifar10 测试集86.38% Tensorflow 2.1 小白从代码实践中 理解
  10. mysql的回滚机制_mysql事务回滚机制概述
  11. Mastering Oracle SQL学习笔记(join句法专题第六部份)
  12. mysql中什么是dml语句_mysql---DML语句
  13. myeclipse2017添加tomcat后,在tomcat启动按钮里面找不到的问题
  14. 内存模型以及分区,需要详细到每个区放什么
  15. GitHub上有不错的 C 开源项目?
  16. Wireless Network(并查集)
  17. 【2018ECCV】Zero-Shot Deep Domain Adaptation 零样本深度域适应
  18. 主播名字和热度的字符串该怎么写啊,他们两个量前面的字符一样
  19. 高德地图JSAPI测距功能优化
  20. 记一次被QQ邮箱钓鱼邮件事件

热门文章

  1. 【汇编语言】emu汇编软件破解注册码
  2. 文献阅读(40)ICLR2021-Combining Label Propagation and Simple Models Out-performs Graph Neural Networks
  3. 【滤波专题-第1篇】数字滤波器快速入门——FIR有限冲激响应滤波讲解
  4. 开发一个时间管理小程序
  5. 普加项目管理甘特图使用--安装部署
  6. 汽车控制器CAN通信DBC文件工具:EXCEL生成DBC和生成代码
  7. 速成KeePass全局自动填表登录QQ与迅雷(包括中文输入法状态时用中文用户名一键登录)...
  8. css鼠标经过盒子,盒子向上移动动画
  9. android 126邮箱格式,如何在Android系统邮件应用程序中添加帐户(默认POP3)
  10. 最全的LBS手机定位技术说明