【笔记版】k8s部署步骤---kubeadm init 原理

概要

kubeadm init是Kubernetes集群初始化的命令。它负责创建并启动一个Kubernetes集群的控制平面。

在这里插入图片描述

1. 环境检查

kubeadm init会首先检查一些条件,例如系统配置和环境变量是否满足要求,以确保能够成功初始化集群。

[init] Using Kubernetes version: v1.20.2
[preflight] Running pre-flight checks
	[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 25.0.2. Latest validated version: 19.03
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'

为创建一个Kubernetes集群拉取镜像,依赖网络连接等1~2分钟,或者在先前用kubeadm config images pull准备好镜像。

2. 生成证书

kubeadm init会生成用于集群身份验证和通信的TLS证书。这些证书用于保证集群的安全性。 这样,kubeadm就会自动跳过证书生成的步骤,从而交给用户自己处理。

[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local master master-virtual-machine] and IPs [10.96.0.1 192.168.159.146]
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [localhost master-virtual-machine] and IPs [192.168.159.146 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [localhost master-virtual-machine] and IPs [192.168.159.146 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key

3. 初始化etcd

kubeadm init会启动一个内嵌的etcd数据库。etcd是Kubernetes集群中用于存储配置信息的分布式键值存储系统。

4. 初始化控制平面组件

kubeadm init会启动Kubernetes控制平面组件,包括kube-apiserver、kube-controller-manager和kube-scheduler。它们负责集群的管理、调度和控制。

Master
kubelet
kube-proxy
API-Server
Controller-Manager
etcd
node

运行在master上的组件:

1️⃣ Kubernetes API Server(kube-apiserver)
Kubernetes API,集群的统一入口,各组件协调者,以HTTP API提供接口服务,Kubernetes里所有资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。

2️⃣ Kubernetes Controller Manager(kube-controller-manager)
Kubernetes里所有资源对象的自动化控制中心,可以理解为资源对象的大总管

3️⃣ kube-scheduler
负责资源调度(Pod调度)的进程

运行在node上的组件:
1️⃣ kubelet
kubelet是Master在Node节点上的Agent,负责与master节点的apiserver进行通信,管理本机运行容器的生命周期,负责Pod对应容器的创建、启停等任务。同时与Master密切协作,实现集群管理的基本功能,获取Node节点上Pod的运行状态等

2️⃣ kube-proxy
在Node节点上实现Pod网络代理,实现Kubernetes Service的通信和负载均衡机制的重要组件。

在这里插入图片描述

5. 生成kubeconfig文件

kubeadm init会生成一个kubeconfig文件,用于后续的集群管理操作。kubeconfig文件包含了集群的连接信息和凭证。

[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file


......

这些文件记录了当前Master节点的服务器地址、监视端口、证书目录等信息。这样,对应的客户端(如:scheduler和kubelet)对自动加载对应的文件,从而使其中的信息与kube-apiserver进行安全对接。

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

控制面操作包括生成etcd的static pod yaml、更新kube-system命名空间下的configmap对象kubeadm-config,将该控制节点信息更新进去、将该master节点打上污点,不作为计算节点数据面使用;至此,kubeadm join流程结束。

6. 部署网络插件

安装默认插件,kubernetes默认必须安装的两个插件为:kube-proxyDNS,分别用来提供集群的服务发现和DNS功能,且均以容器镜像的方式启动。

[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
addon
CoreDNS
kube-proxy

7. 完成集群初始化

kubeadm init会输出一些信息和命令,以供用户配置集群的工作节点。这些命令需要在每个工作节点上运行,以加入集群。

`Your Kubernetes control-plane has initialized successfully!`

通过以上步骤,kubeadm init成功完成集群初始化,并提供了进一步操作集群的指导。用户可以根据输出的信息和命令,完成集群的配置和管理。

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/

图文参考:

K8S 源码探秘 之 kubeadm init 执行流程分析
kubeadm工作原理-kubeadm init原理分析-kubeadm join原理分析
kubernetes各组件介绍

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,以下是使用kubeadm部署Kubernetes 1.27.4的步骤: 1. 确认k8s本和环境:首先,确认您要部署的Kubernetes本为1.27.4,并确保您的环境满足部署要求,例如操作系统本、CPU和内存等。 2. 创建配置文件:根据您的需求,创建Kubernetes集群的配置文件,包括证书、网络插件、镜像源等。您可以根据实际情况进行配置。 3. 安装kubeadm:在两台Ubuntu 16.04 64位双核CPU虚拟机上安装kubeadm。您可以使用以下命令安装kubeadm: ```shell sudo apt-get update sudo apt-get install -y kubeadm ``` 4. 初始化Master节点:在其中一台虚拟机上执行以下命令初始化Master节点: ```shell sudo kubeadm init --kubernetes-version=1.27.4 ``` 该命令将会初始化Kubernetes Master节点,并生成一个加入集群的命令。 5. 部署网络插件:根据您的配置文件选择网络插件,这里以flannel为例。在Master节点上执行以下命令部署flannel网络插件: ```shell kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` 6. 加入Worker节点:在另一台虚拟机上执行Master节点生成的加入集群的命令,将其加入到Kubernetes集群中: ```shell sudo kubeadm join <Master节点IP>:<Master节点端口> --token <Token值> --discovery-token-ca-cert-hash <证书哈希值> ``` 请将`<Master节点IP>`、`<Master节点端口>`、`<Token值>`和`<证书哈希值>`替换为实际的值。 至此,您已成功使用kubeadm部署了Kubernetes 1.27.4集群。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值