【读书笔记】10 Kubernetes一键部署利器 kubeadm
admin
2023-04-03 21:41:11
0

《深入剖析Kubernetes - 09  从容器到容器云 谈谈Kubernetes的本质》

kubeadm 简化部署操作,仅需要以下2个操作即可创建一个k8s 集群

# 创建一个 Master 节点
$ kubeadm init

# 将一个 Node 节点加入到当前集群中
$ kubeadm join


k8s 每个组件都是一个独立的二进制文件,部署过程无非就是将二进制跟配置文件分布到指定机器,并通过脚本启停进程,这些工作在物理机时代完全可以通过saltstack 或者ansible 来完成,但后续运维成本会比较高,得自己实现进程监控,健康检查等等。

既然k8s 做服务编排,自然可以解决服务发现,服务注册,健康检查等功能。

具体方法是,master机器上 先手动在机器上安装kubeadm、kubelet、kubectl 这3个二进制文件;

而node 节点上面则只需要安装kubelet / kubeadm 然后通过kubeadm join 添加到集群内部即可

一、kubeadm init 工作流程

(1)检查机器环境是否满足

1、linux内核是否3.10 以上

2、cgroups 模块是否启用

3、hostname 是否符合标准(遵循DNS命名规则)

4、kubeadm 和 kubelet 版本是否匹配

5、是否已安装kubernetes 二进制文件

6、10250/10251/10252 等端口是否被占用

7、ip、mount 等指令是否存在

8、docker 是否安装

... ...


(2)生成kubernetes 对外提供服务所需证书和对应目录

默认放在/etc/kubernetes/pki 目录下

主要有ca.crt / ca.key

apiserver-kubelet-client.crt / apiserver-kubelet-client.key


(3)为master组件生成Pod 配置文件

即api-server、scheduler、controller-manager 以static-pod 方式部署

static-pod 允许将yaml 文件放在指定目录,在kubelet 启动时指定该目录,此时它会自动检查该目录并加载所有pod yaml文件并启动相应pod


为什么要用static pod?

刚创建集群的时候,上面并没有api-server 、kubectl ,无法创建相关的pod,故只能通过这种方式启动pod。

master 组件yaml文件生成目录为:/etc/kubernetes/manifests

ls /etc/kubernetes/manifests/
etcd.yaml  kube-apiserver.yaml  kube-controller-manager.yaml  kube-scheduler.yaml


这里有个api-server.yaml 的例子:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    scheduler.alpha.kubernetes.io/critical-pod: ""
  creationTimestamp: null
  labels:
    component: kube-apiserver
    tier: control-plane
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-apiserver
    - --authorization-mode=Node,RBAC
    - --runtime-config=api/all=true
    - --advertise-address=10.168.0.2
    ...
    - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
    - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
    image: k8s.gcr.io/kube-apiserver-amd64:v1.11.1
    imagePullPolicy: IfNotPresent
    livenessProbe:
      ...
    name: kube-apiserver
    resources:
      requests:
        cpu: 250m
    volumeMounts:
    - mountPath: /usr/share/ca-certificates
      name: usr-share-ca-certificates
      readOnly: true
    ...
  hostNetwork: true
  priorityClassName: system-cluster-critical
  volumes:
  - hostPath:
      path: /etc/ca-certificates
      type: DirectoryOrCreate
    name: etc-ca-certificates
  ...


通过这么一个yaml配置文件,告诉k8s 创建相应的api object , 这个api对象定义参考上述yaml 文件


(4)为该集群生成bootstrap token

供worknode 节点 通过kubeadm join 加入到该集群


(5)安装默认插件

例如kube-proxy / dns (以容器的方式部署)


二、kubeadm join 工作流程

为了方便部署操作,不需要手动从master 上面拷贝证书到每台worknode , kubeadm 至少需要发起一次"不安全模式" 的访问到api-server,从而拿到保存在configmap中的cluster-info,而bootstrap token 扮演的就是这个过程中安全验证的角色。


三、指定kubeadm 部署参数

$ kubeadm init --config kubeadm.yaml

在kubeadm.yaml 配置文件中定义

PS:kubeadm 的不足之处在于,它并没有解决像etcd 、master 等组件的高可用部署,而是单点部署。


相关内容

热门资讯

特朗普下令不打了,美国的“余粮... 可以说戛然而止,快得让很多人都无法适应。前两周,每一天美国都要打击伊朗一通。就在7月24日白宫会议前...
穆杰塔巴最新表态:支持黎真主党 △伊朗最高领袖穆杰塔巴·哈梅内伊(资料图)当地时间7月26日晚,伊朗最高领袖穆杰塔巴·哈梅内伊对黎巴...
美军瘫痪一艘驶向伊朗的油轮,特... 美国总统特朗普虽下令暂停打击伊朗,但美军仍在执行对霍尔木兹海峡的封锁任务。针对美军瘫痪一艘驶向伊朗油...
“小牌大耍”的底气到底是哪里来... 澎湃首席评论员 李平这两天,“艺人李权哲乘高铁占座事件”在网上引发热议,该艺人参加的活动主办方曾发布...
越南籍船舶南海遇险沉没,中方已... 据凤凰卫视报道,一艘越南船舶7月24日夜间在越南庆和以东220海里附近遇险沉没,船上共62名越南籍人...
李权哲占座、蒙面、装死:娱乐圈... 你买了一张高铁一等座的票,找到自己的位置,18A。有人坐着。你拿出手机看了眼购票记录——没错,18A...
杭州景区咖啡店闯入1条幼蛇,仅... 夏天气温高、湿度大,蛇类活动进入高峰期,千万别被“小蛇无害”的刻板印象骗了!有些幼蛇看着迷你可爱,实...
AI开源公开信签署企业增至50... IT之家 7 月 26 日消息,英伟达、微软、IBM、Meta 等 25 家美国科技企业本周(7 月...
南阳快手短视频代运营企业的服务... 在短视频平台快速发展的背景下,企业通过快手等渠道进行内容运营已成为常见的市场动作。对于希望借助短视频...
普通人该如何跟上科技发展的步伐 这个被称作科技的词汇, 听起来既有宏大之感, 又颇为遥远, 好似仅仅归属于在实验室里专心致志钻研的科...