第三周记录

kubernets组件介绍:

  • kuber-api server:k8s的鉴权、准入的入口

    提供了k8s各类资源对象的增删改查以及watch等HTTP Rest接口,这些对象包括pods、services、replicationcontrollers等,APIServer为REST操作提供服务,并未集群的共享状态提供前端,所有其它组件都通过该前端进行交互。

  • REST ful API

    是REST风格的网络接口,REST描述的是在网络中client和server的一种交互形式

  • REST

    是一种软件架构风格,或者说是一种网络规范,其强调HTTP应当以资源为中心,并且规范了url风格,规范了HTTP请求动作(GET/PUT/POST/DELETE/HEAD/OPTIONS)的使用。具有对应的语意

运行时

  • k8s版本大于1.23 containerd或cri-docker
  • k8s版本小于等于1.23 docker

​ 区别:

​ 对于k8s的管理和使用,kubectl无区别

​ 主要是安装部署k8s的时候有区别

image-20221122141806744

kubernetes api server

  • 该端口默认值为6443,可通过启动参数--secure-port的值来修改默认值
  • 默认IP地址为非本地(Non-Localhost)网络端口,通过启动参数--bind-address设置该值
  • 该端口用于接收客户端、dashboard等外部HTTPS请求
  • 用于基于Token文件或客户端证书及HTTP Base的认证
  • 用于基于策略的授权
  • kubernetes api 测试
    • curl --cacert /etc/kubernetes/ssl/ca.pem -H “Authorization:Bearer ${TOKEN}” https://ip:6443
    • curl 127.0.0.1:6443 返回所有的api列表
    • curl 127.0.0.1:6443/apis 分组api
    • curl 127.0.0.1:6443/api/v1 带具体版本号的api
    • curl 127.0.0.1:6443/version api版本信息
    • curl 127.0.0.1:6443/healthz/etcd 与etcd的心跳监测
    • curl 127.0.0.1:6443/apis/autoscaling/v1 api的详细信息
    • curl 127.0.0.1:6443/metrics 指标数据
  • api版本
    • Alpha:预览版,可能包含bug和错误,后期版本会修复且不支持之前的版本,不建议使用
    • Beta:测试版,如storage.k8s.io/v1beta1,可能存在不稳定或者潜在bug,不建议生产使用
    • v1:稳定版,如apps/v1,经过验证的stable版本,可以生产使用

kube-scheduler

kube-scheduler | Kubernetes

  • kubernets调度器是一个控制面进程,负责将pods指派到节点上

  • 通过调度算法为待调度Pod列表的每个Pod从可用node列表里选择一个最合适的node,并将信息写入etcd

  • node节点上的kubelet通过API Server监听到kubernets scheduler产生的pod绑定信息,然后获取对应的pod清单,下载image并启动容器

  • 策略

    • LeastRequestedPriority:优先从备选节点列表中选择资源消耗最小的节点(CPU+内存)
    • CalculateNodeLabelPriority:优先选择含有指定label的节点
    • BalancedResourceAllocation:优先从备选节点列表中选择各项资源使用率最均衡的节点
  • 工作步骤

    • 创建pod
    • 过滤掉资源不足的节点
    • 在剩余可用节点进行筛选
    • 选中节点

kube-controller-manager

kube-controller-manager | Kubernetes

  • controller-manager还包含一些子控制器(副本控制器、节点控制器、命名空间控制器、服务账号控制器等),控制器作为集群内部的管理控制中心,负责集群内的node、pod副本、服务断点(endpoint)、命名空间、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个node意外宕机时,controller-manager会及时发现并执行自动化修复流程,确保集群中的pod副本始终处于预期的工作状态
  • controller-manager控制器每隔5秒检查一次节点状态
  • 如果controller-manager没有收到节点的心跳,则将该node节点标记为不可达
  • controller-manager将在node标记为无法访问之前等待40秒
  • 如果node节点被标记为无法访问5分钟后还没恢复,controller-manager会删除当前node节点的所有pod并在其它节点上重建这些pod
  • pod高可用机制
    • node monitor period:节点监视周期,5s
    • node monitor grace period:节点监视宽限期,40s
    • node eviction timeout:pod驱逐时间,5m

kube-proxy

kube-proxy | Kubernetes

管理当前节点上的iptables或者IPVS规则

  • kube-proxy:kubernetes网络代理运行在node上,它反映了node上kubernetes API中定义的服务并可以通过一组后端进行简单的tcp、udp和sctp流转发或者在一组后端进行循环tcp、udp和sctp转发,用户必须使用apiserver API创建一个服务来配置代理,其实就是kube-proxy通过在主机上维护网络规则并执行连接转发来实现kubernetes服务访问
  • kube-proxy运行在每个节点上,监听API Server中服务对象的变化,在通过管理iptables或ipvs规则来实现网络转发
  • kube-proxy不同的版本可支持三种工作模式
    • UserSpace:k8s v1.1版本之前使用,1.2及以后淘汰
    • IPtables:k8s v1.1版本开始支持,1.2开始默认
    • IPVS:k8s v1.9版本引入到1.11为正式版本,需要安装ipvsadm、ipset工具包和加载ip_vs内核模块

配置使用IPVS及指定调度算法kube-proxy 配置 (v1alpha1) | Kubernetes

kubelet

kubelet | Kubernetes

接收api server的pod创建。调用(docker、containerd)

对pod进行周期健康检查

给api server反馈pod状态

给api server反馈node状态

kubelet是运行在每个worker节点的代理组件,它会监视已分配给节点的pod。具体功能如下:

  • 向master节点汇报node节点的状态信息
  • 接收指令并在pod中创建容器
  • 准备pod所需的数据卷
  • 返回pod的运行状态
  • 在node节点执行容器健康检查

kubectl

kubectl | Kubernetes

是一个通过命令行对kubernets集群进行管理的客户端工具

etcd

为 Kubernetes 运行 etcd 集群 | Kubernetes

是CoerOS公司开发,目前是kubernetes默认使用的key-vaule数据存储系统,用于保存k8s所有集群数据。etcd支持分布式集群功能,生产环境使用时需要etcd数据提供定期备份机制

DNS

自定义 DNS 服务 | Kubernetes

负责为整个集群提供DNS服务。从而实现服务之间的访问

  • coredns
  • kube-dns:1.18
  • sky-dns

Dashboard

部署和访问 Kubernetes 仪表板(Dashboard) | Kubernetes

是基于网页的k8s用户界面,可以使用Dashboard获取运行在集群中的应用的概览信息,也可以创建或者修改k8s资源(如Development、Job、DaemonSet等),也可以的Development实现弹性伸缩、发起滚动升级、重启pod或者使用想到创建新的应用。

基于kubeadm和containerd部署k8s v1.24.3

一、contianerd部分

1.安装contianerd

1.下载二进制文件
# pwd
/usr/local/src
# ll
total 42424
drwxr-xr-x  2 root root     4096 Nov 18 21:07 ./
drwxr-xr-x 11 root root     4096 Aug 24 16:49 ../
-rw-r--r--  1 root root 43430474 Nov 18 21:07 containerd-1.6.10-linux-amd64.tar.gz
# tar xvf containerd-1.6.10-linux-amd64.tar.gz 
bin/
bin/ctr
bin/containerd
bin/containerd-shim
bin/containerd-stress
bin/containerd-shim-runc-v2
bin/containerd-shim-runc-v1
# cp bin/* /usr/local/bin/


2.创建service文件
# vim /etc/systemd/system/containerd.service

[Unit]
Description=containerd container runtime
After=network.target local-fs.target
Documentation=https://contianerd.io

[Service]
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
ExecStartPre=-/usr/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd

LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target

2.编辑配置文件

旧版本镜像加速
# mkdir /etc/containerd/
# containerd config default > /etc/containerd/config.toml
# vim /etc/containerd/config.toml

 61     sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"  #该镜像用于封装pod底层网络
153       [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
154         [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
155           endpoint = ["https://gjsamcgt.mirror.aliyuncs.com"]

# systemctl restart containerd.service 
# systemctl enable containerd.service 
# systemctl status containerd.service 


sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7"

新版containerd镜像加速
# containerd config default > /etc/containerd/config.toml
# vim /etc/containerd/config.toml

144     [plugins."io.containerd.grpc.v1.cri".registry]
145       config_path = "/etc/containerd/certs.d"

创建/etc/container

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值