百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

k8s集群部署工具kubeadm详解

ztj100 2025-01-01 23:47 16 浏览 0 评论

朋友,你好。

kubeadm是快捷创建Kubernetes集群的最佳实践工具,我们只需用kubeadm init 和 kubeadm join 两条命令就可以完成k8s集群的部署。

kubeadm init用于部署控制面节点。

kubeadm join用于部署工作节点并将其加入到集群中。

此外kubeadm还用于控制平面升级、令牌和证书续订等。

kubeadm安装


使用阿里云镜像源进行安装。

Centos

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y  kubeadm


Ubuntu

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubeadm


kubeadm常用命令


kubeadm init 用于搭建控制平面节点

kubeadm join 用于搭建工作节点并将其加入到集群中

kubeadm upgrade 用于升级 Kubernetes 集群到新版本

kubeadm config 如果你使用了 v1.7.x 或更低版本的 kubeadm 版本初始化你的集群,则使用 kubeadm upgrade 来配置你的集群

kubeadm token 用于管理 kubeadm join 使用的令牌

kubeadm reset 用于恢复通过 kubeadm init 或者 kubeadm join 命令对节点进行的任何变更

kubeadm certs 用于管理 Kubernetes 证书

kubeadm kubeconfig 用于管理 kubeconfig 文件

kubeadm version 用于打印 kubeadm 的版本信息

kubeadm init的工作流程


kubeadm init 命令通过执行下列步骤来启动一个 Kubernetes 控制平面节点。

  1. 在做出变更前运行一系列的预检项来验证系统状态。一些检查项目仅仅触发警告, 其它的则会被视为错误并且退出 kubeadm,除非问题得到解决或者用户指定了 --ignore-preflight-errors=<错误列表> 参数。
  2. 生成一个自签名的 CA 证书来为集群中的每一个组件建立身份标识。用户可以通过将其放入 --cert-dir 配置的证书目录中(默认为 /etc/kubernetes/pki) 来提供他们自己的 CA 证书以及/或者密钥。APIServer 证书将为任何 --apiserver-cert-extra-sans 参数值提供附加的 SAN 条目,必要时将其小写。
  3. 将 kubeconfig 文件写入 /etc/kubernetes/ 目录以便 kubelet、控制器管理器和调度器用来连接到 API 服务器,它们每一个都有自己的身份标识,同时生成一个名为 admin.conf 的独立的 kubeconfig 文件,用于管理操作。
  4. 为 API 服务器、控制器管理器和调度器生成静态 Pod 的清单文件。假使没有提供一个外部的 etcd 服务的话,也会为 etcd 生成一份额外的静态 Pod 清单文件。
  5. 静态 Pod 的清单文件被写入到 /etc/kubernetes/manifests 目录;kubelet 会监视这个目录以便在系统启动的时候创建 Pod。
  6. 一旦控制平面的 Pod 都运行起来,kubeadm init 的工作流程就继续往下执行。
  7. 对控制平面节点应用标签和污点标记以便不会在它上面运行其它的工作负载。

  8. 生成令牌,将来其他节点可使用该令牌向控制平面注册自己。

  9. 为了使得节点能够遵照启动引导令牌和 TLS 启动引导 这两份文档中描述的机制加入到集群中,kubeadm 会执行所有的必要配置:
  10. 创建一个 ConfigMap 提供添加集群节点所需的信息,并为该 ConfigMap 设置相关的 RBAC 访问规则。
  11. 允许启动引导令牌访问 CSR 签名 API。
  12. 配置自动签发新的 CSR 请求。

  1. 通过 API 服务器安装一个 DNS 服务器 (CoreDNS) 和 kube-proxy 附加组件。在 Kubernetes v1.11 和更高版本中,CoreDNS 是默认的 DNS 服务器。请注意,尽管已部署 DNS 服务器,但直到安装 CNI 时才调度它。


kubeadm选项


--apiserver-advertise-address string


API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口。

--apiserver-bind-port int32 默认值:6443


API 服务器绑定的端口。

--apiserver-cert-extra-sans strings


用于 API Server 服务证书的可选附加备用名称(SAN)。可以是 IP 地址和 DNS 名称。

--cert-dir string 默认值:"/etc/kubernetes/pki"


保存和存储证书的路径。

--certificate-key string


用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。

--config string


kubeadm 配置文件的路径。

--control-plane-endpoint string


为控制平面指定一个稳定的 IP 地址或 DNS 名称。

--cri-socket string


要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。

--dry-run


不做任何更改;只输出将要执行的操作。

--feature-gates string


一组用来描述各种功能特性的键值(key=value)对。选项是:
EtcdLearnerMode=true|false (ALPHA - 默认值=false)
PublicKeysECDSA=true|false (ALPHA - 默认值=false)
RootlessControlPlane=true|false (ALPHA - 默认值=false)
UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)

-h, --help


init 操作的帮助命令。

--ignore-preflight-errors strings


错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。

--image-repository string 默认值:"registry.k8s.io"


选择用于拉取控制平面镜像的容器仓库。

--kubernetes-version string 默认值:"stable-1"


为控制平面选择一个特定的 Kubernetes 版本。

--node-name string


指定节点的名称。

--patches string


它包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。例如,"kube-apiserver0+merge.yaml"或仅仅是 "etcd.json"。"target" 可以是 "kube-apiserver"、"kube-controllermanager""kubescheduler"、"etcd"、"kubeletconfiguration" 之一。"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一, 并且它们与 kubectl 支持的补丁格式相同。默认的 "patchtype" 是 "strategic"。"extension" 必须是"json" 或"yaml"。"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。

--pod-network-cidr string


指明 Pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDR。

--service-cidr string 默认值:"10.96.0.0/12"


为服务的虚拟 IP 地址另外指定 IP 地址段。

--service-dns-domain string 默认值:"cluster.local"


为服务另外指定域名,例如:"myorg.internal"。

--skip-certificate-key-print


不要打印用于加密控制平面证书的密钥。

--skip-phases strings


要跳过的阶段列表。

--skip-token-print


跳过打印 'kubeadm init' 生成的默认引导令牌。

--token string


这个令牌用于建立控制平面节点与工作节点间的双向通信。格式为 [a-z0-9]{6}.[a-z0-9]{16} - 示例:abcdef.0123456789abcdef

--token-ttl duration 默认值:24h0m0s


令牌被自动删除之前的持续时间(例如 1s,2m,3h)。如果设置为 '0',则令牌将永不过期。

--upload-certs


将控制平面证书上传到 kubeadm-certs Secret。

相关推荐

从IDEA开始,迈进GO语言之门(idea got)

前言笔者在学习GO语言编程的时候,GO语言在国内还没有像JAVA/Php/Python那样普及,绕了不少的弯路,要开始入门学习一门编程语言,最好就先从选择一个好的编程语言的开发环境开始,有了这个开发环...

基于SpringBoot+MyBatis的私人影院java网上购票jsp源代码Mysql

本项目为前几天收费帮学妹做的一个项目,JavaEEJSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。一、项目介绍基于SpringBoot...

基于springboot的个人服装管理系统java网上商城jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目,JavaEEJSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。一、项目介绍基于springboot...

基于springboot的美食网站Java食品销售jsp源代码Mysql

本项目为前几天收费帮学妹做的一个项目,JavaEEJSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。一、项目介绍基于springboot...

贸易管理进销存springboot云管货管账分析java jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目,JavaEEJSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。一、项目描述贸易管理进销存spring...

SpringBoot+VUE员工信息管理系统Java人员管理jsp源代码Mysql

本项目为前几天收费帮学妹做的一个项目,JavaEEJSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。一、项目介绍SpringBoot+V...

目前见过最牛的一个SpringBoot商城项目(附源码)还有人没用过吗

帮粉丝找了一个基于SpringBoot的天猫商城项目,快速部署运行,所用技术:MySQL,Druid,Log4j2,Maven,Echarts,Bootstrap...免费给大家分享出来前台演示...

SpringBoot+Mysql实现的手机商城附带源码演示导入视频

今天为大家带来的是基于SpringBoot+JPA+Thymeleaf框架的手机商城管理系统,商城系统分为前台和后台、前台用的是Bootstrap框架后台用的是SpringBoot+JPA都是现在主...

全网首发!马士兵内部共享—1658页《Java面试突击核心讲》

又是一年一度的“金九银十”秋招大热门,为助力广大程序员朋友“面试造火箭”,小编今天给大家分享的便是这份马士兵内部的面试神技——1658页《Java面试突击核心讲》!...

SpringBoot数据库操作的应用(springboot与数据库交互)

1.JDBC+HikariDataSource...

SpringBoot 整合 Flink 实时同步 MySQL

1、需求在Flink发布SpringBoot打包的jar包能够实时同步MySQL表,做到原表进行新增、修改、删除的时候目标表都能对应同步。...

SpringBoot + Mybatis + Shiro + mysql + redis智能平台源码分享

后端技术栈基于SpringBoot+Mybatis+Shiro+mysql+redis构建的智慧云智能教育平台基于数据驱动视图的理念封装element-ui,即使没有vue的使...

Springboot+Mysql舞蹈课程在线预约系统源码附带视频运行教程

今天发布的是由【猿来入此】的优秀学员独立做的一个基于springboot脚手架的Springboot+Mysql舞蹈课程在线预约系统,系统项目源代码在【猿来入此】获取!https://www.yuan...

SpringBoot+Mysql在线众筹系统源码+讲解视频+开发文档(参考论文

今天发布的是由【猿来入此】的优秀学员独立做的一个基于springboot脚手架的在线众筹管理系统,主要实现了普通用户在线参与众筹基本操作流程的全部功能,系统分普通用户、超级管理员等角色,除基础脚手架外...

Docker一键部署 SpringBoot 应用的方法,贼快贼好用

这两天发现个Gradle插件,支持一键打包、推送Docker镜像。今天我们来讲讲这个插件,希望对大家有所帮助!GradleDockerPlugin简介...

取消回复欢迎 发表评论: