【Kubernetes基础】k8s各组件功能-基于kubeadm和containerd搭建k8s--第三周作业

一、梳理k8s 各组件功能

 kube-apiserver
    Kubernetes API server提供k8s各类资源对象的增删改查及watch等rest接口,这些对应包括pods/services/replicationcontrollers等;
    API Server为各类操作提供接口服务,并为集群的资源状态提供前端,所有其他组件都通过该前端进行交互;
    API Server默认端口6443,可通过启动参数"--secure-port"来修改默认端口,该端口接收客户端、dashboard等外部https请求;
    默认IP地址为非本地(Non-localhost)网络端口,通过启动参数"--bind-address"设置bind IP;
    基于tocken文件或客户端证书的认证,支持基于策略的授权;
kube-scheduler
    Kubernetes的调度器,是一个控制面的进程,负责将pods调度到节点上;
    通过调度算法为待调度pod列表里的每个pod从可用node列表中选择一个最合适的node,并将信息写入etcd中;
    node节点上的kubelet通过APIServer监听到kube-scheduler产生的pod绑定信息,然后获取对应的pod清单,下载image,并启动容器;
    调度策略:
       LeastRequestedPriority: 优先从备选节点列表中选择资源消耗最小的节点(CPU+MEM)
       CalculateNodeLabelPriority: 优先选择含有指定Label的节点
       BalancedResourceAllocation: 优先从备选节点列表中选择各项资源使用率最均衡的节点
kube-controller-manager
    ControllerManager还包括一些子控制器(副本控制器、节点控制器、命名空间控制器和服务帐号控制器)
    控制器作为集群内部的管理控制中心,负责集群内的node/pod副本/服务端点(Endpoint)、命名空间(Namespace)、服务帐号(ServiceAccount)、资源定额(ResourceQuota)的管理
    当某个node意外宕机时,ControllerManager会及时发现并执行自动化修复流程,确保集群中的pod副本时钟处于期望的工作状态
    ControllerManager控制器每间隔5s检查一次节点的状态,如果ControllerManager没收到节点的心跳,则将node节点标记为不可达(在标记为不可达之前等待40s)
    如果该node节点被标记为不可达后5min还没恢复,ControllerManager会删除该节点上的所有pod,并在其他可用节点上重建这些pod
kube-porxy
    Kubernetes网络代理,运行在node上,它反映了node上Kube-apiserver中定义的服务,并可以通过一组后端进行简单的TCP/UDP和SCTP流转发或者在一组后端进行循环TCP/UDP/SCTP转发;
    用户必须使用apiserver api创建服务来配置代理,kube-proxy通过在主机上维护网络规则并执行转发来实现Kubernetes服务访问;
    kube-porxy运行在每个节点上,监听apiserver中服务对象的变化,再通过管理iptables或者IPVS规则来实现网络的转发;
    kube-proxy不同版本可支持三种工作模式:
         UserSpace:k8s v1.1之前使用,k8s v1.2及以后已淘汰
         IPtables:k8s v1.1版本开始支持,k8s v1.2开始默认使用
         IPVS:k8s v1.9引入 k8s v1.11正式使用IPVS,需要安装ipvsadm/ipset工具包,需要加载ip_vs内核模块
         IPVS相对IPtables效率会更高一些,使用IPVS模式需要在运行Kube-Proxy的节点上安装ipvsadm、ipset工具包和加载ip_vs内核模块,当Kube-Proxy以IPVS代理模式启动时,Kube-Porxy
         将验证节点上是否安装了IPVS模块,如果未安装,则Kube-Proxy将回退到IPtables代理模式;
         使用IPVS模式,Kube-proxy会监视kubernetes Service对象和endpoints,调用宿主机内核netlink接口,相应地创建IPVS规则并定期与kubernetes service对象的endpoints对象同步IPVS规则,
         以确保IPVS状态与期望一致,访问服务时,流量将被重定向到其中一个后端pod,ipvs使用哈希表作为底层数据结构并在内核空间中工作,这意味着ipvs可以更快地重定向流量,并且在同步代理
         规则时具有更好的性能,此外,ipvs为负载均衡提供了更多调度算法,如:rr(轮询调度)、lc(最小连接数)、dh(目标哈希)、sh(源哈希)、sed(最短期望延迟)、nq(不排队调度)等。
kubelet
    kubelet是运行在每个worker节点的代理组件,它监视分配给节点的pod
    向master汇报node节点的状态信息
    接收指令并在pod中创建docker容器
    准备pod所需的数据卷
    返回pod的运行状态
    在node节点执行容器健康检查
kubectl
    kubectl是一个通过命令行对kubernetes集群进行管理的客户端工具
etcd
    etcd是CoreOS公司开发,目前是kubernetes默认使用的key-value数据存储系统,    用于保存kubernetes的所有集群数据,etcd支持分布式集群功能,生产环境使用时需要为etcd数据制定定期备份机制
DNS
    DNS负责为整个集群提供DNS服务,从而实现服务之间的访问(coredns/kube-dns/sky-dns)    
Dashboard
    Dashboard是基于网页的kubernetes用户界面,可以使用Dashboard获取运行在集群中应用的概览信息,可以创建、修改kubernetes资源(如deployment、job、daemonset等),也可以对deployment实现弹性伸缩、
    发起滚动升级、重启pod  

二、掌握containerd的安装和使用

 1.使用yum安装containerd

查看containerd.service文件 

验证runc环境

查看containerd的默认配置

containerd config default

cat /etc/containerd/config.toml

验证下载镜像

ctr客户端创建测试容器

 2.二进制安装containerd

下载二进制文件,解压,并将解压出来的二进制文件cp至/usr/local/bin下

从yum安装containerd的机器上cp service文件,并修改二进制文件的路径

 从yum安装containerd的机器上生成配置文件,并cp过来

 从github上下载runc,cp至/usr/bin/runc,赋可执行权限

下载镜像,并运行测试容器

containerd客户端工具扩展

推荐使用nerdctl

 安装cni-plugins

运行测试容器

 

三、基于kubeadm和containerd部署单master k8s v1.24.x 

1.在master、node1、node2上分别安装containerd、cni-plugins、runc、nerdctl,安装步骤见上文

2.在master、node1、node2上写kubernetes的yum.repo文件

三个机器上使用yum安装kubeadm、kubelet、kubectl

3.提前下载kubernetes初始化使用的镜像

images-download.sh脚本内容

 4.修改内核参数(三个节点上都做)

在/etc/sysctl.conf文件里添加两行

5.初始化kubernetes

初始化成功

根据提示创建.kube,cp认证文件

 6.根据提示将worker节点加入集群

先把认证文件cp到worker节点

将节点加入集群

7.检查加入结果

 8.部署nginx.yaml测试集群

浏览器访问测试

四、部署harbor并实现https(SAN签发证书)

containerd登录docker基础--第二周作业_KaiA8的博客-CSDN博客搭建的harbor时,报错,证书不是通过SAN签发的,所以containerd登录不上,需要重新通过SAN签发证书

containerd登录SAN签发证书的harbor还没测试成功

在harbor机器上使用SAN签发证书

# mkdir /usr/local/src/harbor/certs
# cd /usr/local/src/harbor/certs
# openssl genrsa -out ca.key 4096
# openssl req -x509 -new -nodes -sha512 -days 3650 \
    -subj "/C=CN/ST=ShanDong/L=JiNan/O=example/OU=Personal/CN=likai.com" \
    -key ca.key \
    -out ca.crt
# openssl genrsa -out likai.com.key 4096
# openssl req -sha512 -new \
    -subj "/C=CN/ST=ShanDong/L=JiNan/O=example/OU=Personal/CN=likai.com" \
    -key likai.com.key \
    -out likai.com.csr
# cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=likai.com
DNS.2=harbor.likai.com
DNS.3=harbor1.likai.com
DNS.4=harbor2.likai.com
EOF
# openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in likai.com.csr \
    -out likai.com.crt

生成如下证书文件

修改harbor配置文件harbor.yml,引用生成的证书文件

 重新通过install.sh脚本部署harbor

 成功后通过web页面访问https://harbor.likai.com正常访问

docker登录使用SAN签发证书的harbor时,需要将harbor的证书文件cp到docker的certs.d目录下

在docker机器上创建certs.d目录

将harbor的证书文件scp到docker的certs.d目录下

在测试登录之前,先删除之前登录成功的认证文件.docker/config.json,取消docker/daemon.json里配置的insecure-registries

 测试登录

五、部署haproxy和keepalived高可用负载均衡

【docker基础】使用Harbor搭建私有仓库-docker-compose使用示例--第二周作业_KaiA8的博客-CSDN博客文中已部署两台harbor,并通过haproxy实现两台harbor的负载均衡;

现在需要在添加一台同样的haproxy,然后在两台haproxy上部署keepalived实现haproxy高可用;

在两台haproxy机器上安装keepalived,配置keepalived

 启动两台机器上的keepalived,检查vip是否生成

测试通过vip访问页面https://10.49.33.57

关闭master的keepalived,检查backup机器上是否生成vip

 

测试通过vip访问页面https://10.49.33.57

 

配置域名harbor.likai.com解析到VIP 10.49.33.57,可通过域名访问

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值