第144天学习打卡( Kubernetes DaemonSet k8s集群组件 k8s的核心概念)
Posted doudoutj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第144天学习打卡( Kubernetes DaemonSet k8s集群组件 k8s的核心概念)相关的知识,希望对你有一定的参考价值。
DaemonSet
DaemonSet确保全部(或者一些)Node上运行一个Pod的副本。当有Node加入集群时,也会为他们新增一个Pod。当有Node从集群移除时,这些Pod也会被回收。删除Daemonet将会删除它创建的所有Pod。
使用DaemonSet的一些典型的用法:
- 运行集群存储daemon,例如在每个Node上运行glusterd、ceph。
- 在每个Node上运行日志收集daemon, 例如fluentd、logstash。
- 在每个Node上运行监控daemon,例如Prometheus Node Exporter
Job
负责批处理任务,即仅执行一次的任务, 它保证批处理任务的一个或多个Pod成功结束
Cron Job
Cron Job管理基于时间的Job,即:
- 在给定时间点只运行一次
- 周期性地在给时间点运行
服务发现
网络通讯模式-1
kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平的网络空间中,这在GCE(Google Compute Engine)里面是现成的网络模型,Kubernetes假定这个网络已经存在。而私有云里搭建Kubernetes集群,就不能假定这个网络已经存在了,我们需要自己实现这个网络假设,将不同节点上的Docker容器之间的互相访问先打通,然后运行Kubernetes。
网络通讯模式-2
同一个Pod内的多个容器之间:lo
各Pod之间的通讯:Overlay Network
Pod与Service之间的通讯:各节点的Iptables规则。
网络解决方案 Kubernetes + Flannel -1
Flannel是CoreOS团队针对K8S设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。而且它还能在这些IP地址之间建立一个覆盖网络(Overlay Network),通过这个覆盖网络,将数据包原封不动的传递到目标容器内。
ETCD之Flannel 提供说明:
存储管理Flannel可分配的IP地址段资源
监控ETCD中每个Pod的实际地址,并在内存中建立维护Pod节点路由表
不同情况下网络通信方式
同一个Pod内部通讯:同一个Pod共享一个网络命名空间,共享同一个Linux协议栈
Pod1和Pod2
- Pod1与Pod2不在同一台主机,Pod的地址是与docker0在同一个网段的,但docker0网段与宿主机网卡是两个完全不同的IP网段,并且不同Node之间的通信只能通过宿主机的物理网卡进行。将Pod的IP和所在Node的IP关联起来,通过这个关联让Pod可以互相访问
- Pod1与Pod2在同一台机器,由Docker0网桥直接转发请求至Pod2,不需要经过Flannel
Pod至Service的网络:目前基于性能考虑,全部为iptables维护和转发
Pod到外网:Pod向外网发送请求,查找路由表,转发数据包到宿主机的网卡,宿主网卡完成路由选择后,iptables执行Masquerade,把源IP更改为宿主网卡的IP,然后向外网服务器发送请求
外网访问Pod: Service
组件通讯示意图
K8s集群架构组件
- Master(主控节点) 和node(工作节点)
- (1)Master组件
- apiserver: 集群统一入口,以restful方式,交给etc存储
- scheduler
- 节点调度,选择node节点应用部署
- controller-manager
- 处理集群中常规后台任务,一个资源对应一个控制器
- etcd
- 存储系统,用于保存集群相关的数据
- (2)node组件
- kubeelet
- master派到node节点代表,管理本机容器
- kube-proxy
- 提供网络代理,负载均衡等操作
K8s核心概念
1.Pod
- 最小部署单元
- 一组容器的集合
- 共享网络
- 生命周期是短暂的
2.controller
- 确保预期的pod副本数量
- 无状态应用部署
- 有状态应用部署(需要特定的条件才可以使用)
- 确保所有的node运行同一个pod
- 一次性任务和定时任务
3.service
- 定义一组pod的访问规则
1.搭建k8s环境平台的规划
平台规划
单master集群
多master集群
2.服务器硬件配置要求
测试环境:
生成环境:更高要求
3.搭建k8s集群部署方式
1.前置知识
目前生产部署kubernetes集群主要有两种方式:
(1)kubeadm
Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join用于快速部署kubernetes集群,这个工具能通过两条指令完成kubernetes集群的部署:
第一,创建一个Master节点 kubeadm init
第二,将Node节点加入到当前集群中 $kubeadm join <Master 节点的IP和端口>
安装要求
在开始之前,部署k8s集群机器需要满足一下几个条件:
– 一台或者多台机器,操作系统CentOS7.x-84_x64
– 硬件配置:2GB或更多RAM, 2个CPU或者更多CPU,硬盘30GB或更多
– 集群中所有机器之间网络互通
– 可以访问外网,需要拉取镜像
– 禁止swap分区
按照以上步骤创建另外两个node节点:
使用这个在一个命令行输入的,三个窗口都会同时执行
#关闭防火墙
systemctl stop firewalld #临时关闭
systemctl disable firewalld #永久关闭
#关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config #永久
setenforce 0 #临时
#关闭swap
swapoff -a #临时
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
#根据规划设置主机名
hostnamectl set-hostname <hostname>
#在master添加hosts
cat >> /etc/hosts << EOF
47.108.210.65 k8smaster
47.108.224.103 k8snode1
47.108.212.219 k8snode2
EOF
# 将桥接的IPV4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system #生效
#时间同步
yum install ntpdate -y
ntpdate time.windows.com
(三个端口都要执行这个命令)
#1.卸载旧的版本
yum remove docker \\
docker-client \\
docker-client-latest \\
docker-common \\
docker-latest \\
docker-latest-logrotate \\
docker-logrotate \\
docker-engine
# 2.需要的安装包
yum install -y yum-utils
# 3.设置镜像的仓库
yum-config-manager \\
--add-repo \\
https://download.docker.com/linux/centos/docker-ce.repo
# 建议安装阿里云
yum-config-manager \\
--add-repo \\
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#4更新yum软件包索引
yum makecache fast
# 5安装docker相关的内容 docker-ce 社区 ee企业版
yum install -y docker-ce docker-ce-cli containerd.io
#6 启动docker
systemctl start docker
#7.使用 docker version 查看是否安装成功
# 8 配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://g6yrjrwf.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
添加阿里云YUM软件源(三个端口都要执行这个命令)
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装kubeadm, kubelet和kubectl(三个端口都要执行这个命令)
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet #开机启动
部署Kubernetes Master(注意这个命令只能在master里面执行 前面的命令三个端口都要执行)
kubeadm init \\
--apiserver-advertise-address=47.108.210.65 \\
--image-repository registry.aliyuncs.com/google_containers \\
--kubernetes-version 1.21.1-0 \\
--service-cidr=10.96.0.0/12 \\ #(这个ip和自己的Ip不冲突就行)
--pod-network-cidr=10.244.0.0/16#(这个ip和自己的Ip不冲突就行)
kubeadm init \\
--apiserver-advertise-address=47.108.210.65 \\
--image-repository registry.aliyuncs.com/google_containers \\
--kubernetes-version 1.21.1-0 \\
--service-cidr=10.96.0.0/12 \\
--pod-network-cidr=10.244.0.0/16
(2)二进制包
从github下载发行版的二进制包, 手动部署每个组件,组成kubernetes集群。
kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制部署kubernetes集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。
以上是关于第144天学习打卡( Kubernetes DaemonSet k8s集群组件 k8s的核心概念)的主要内容,如果未能解决你的问题,请参考以下文章
第156天学习打卡(Kubernetes 搭建监控平台 高可用集群部署 )
第149天学习打卡(Kubernetes 部署nginx 部署Dashboard)
第151天学习打卡(Kubernetes 集群YAML文件详解 Pod Controller)