【K8S 概述&架构组件&核心概念 01】
一、k8s概述
1、谷歌14年开源的容器化集群管理系统
2、使用k8s进行容器化应用部署
3、使用k8s利于应用扩展
4、k8s目标实施让部署容器化应用更加简洁和高效
二、k8s集群架构组件
Master(主控节点) 和node(工作节点)
1、Master组件 -->不做具体的事情,只是管理调度node节点
- apiserver:集群统一入口(比如:在集群中部署一个应用,需要通过apiserver进入到集群中) ,即:各个组件的协调者,已resrful方式交给etcd存储
- scheduler:节点调度,选择node节点应用部署(例如:公交站调度各个公交车的运行)
- controller-manager:处理集群中常规后台任务,一个资源对应一个控制器
- ectd:存储系统,用于保存集群中相关的数据 (比如:apiserver的操作数据,controller-manager的创建数据都会在etcd里面保存)
通俗理解:比如想部署一个订单的应用,通过scheduler找到一个node节点用于部署,controller-manager就会建一个对这个订单的controller(控制器)专门对这个订单进行管理,如果下面有一个购物车的应用那么就会建一个controller专门对其进行管理
2、Worker node组件
- kubelet:master派过去专门管理node节点的一个代表,管理本机容器的生命周期,创建,各种操作等等
- kube-proxy:提供网络代理,实现负载均衡等操作
三、k8s核心概念
1、pod:
- 最小部署单元
- 一组容器的集合
- 共享网络
- 生命周期是短暂的(服务器重启之前的pod可能就不存在了)
2、controller: -->利用controller创建pod
- 确保预期的pod副本数量
- 无状态应用部署
- 有状态应用部署
- 确保所有的node运行同一个pod
- 一次性任务和定时任务
3、service
- 定义一组pod的访问规则
四、实际搭建k8s集群
1、搭建k8s环境平台规划
1)单master集群
2)多master集群 (高可用)
3、搭建k8s集群部署方式
3.1、系统初始化
第一种方式:kubeadm 方式
# 关闭防火墙
$ systemctl stop firewalld
$ systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
# 根据规划设置主机名
hostnamectl set-hostname <hostname>
# 在master添加hosts -=-linux写入多行数据时,可以用cat >> /etc/hosts << EOF EOF这样的方式
cat >> /etc/hosts << EOF 172.16.137.130 k8smaster 172.16.137.129 k8snode1 172.16.137.128 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
上面的这种在centos7可以成功,但是在centos8内无法实现
centos8时间同步由chrony来实现
vim /etc/chrony.conf 注释掉 pool 2.centos.pool.ntp.org iburst 加入新的的时间服务器 server 210.72.145.44 iburst #210.72.145.44本机IP地址 server ntp.aliyun.com iburst
重启服务
systemctl restart chronyd.service
此时时间已经与网络时间同步
设置开机自启
systemctl enable chronyd.service
3.2、所有节点安装Docker/kubeadm/kubelet
Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker
1)安装Docker
2)添加阿里云YUM软件源
#设置仓库地址
cat > /etc/docker/daemon.json << EOF { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] } EOF 然后需要重启docker systemctl restart docker
验证修改成功没有:终端输入:docker info
包含这个就说明成功了
#添加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
第一种方式在centos8.4系统安装很容易失败,后面的步骤就不继续了
第二种方式:kubernetes 集群搭建(二进制方式)