一、Kubernetes简介
1. Kubernetes简介
- 在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用。
- Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。
- Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。
- Kubernetes的好处:
- 隐藏资源管理和错误处理,用户仅需要关注应用的开发。
- 服务高可用、高可靠。
- 可将负载运行在由成千上万的机器联合而成的集群中。
2. kubernetes设计架构
Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。
Kubernetes主要由以下几个核心组件组成:
- etcd:保存了整个集群的状态
- apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
- controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
- scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
- kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
- Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)
- kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡
除了核心组件,还有一些推荐的Add-ons:
- kube-dns:负责为整个集群提供DNS服务
- Ingress Controller:为服务提供外网入口
- Heapster:提供资源监控
- Dashboard:提供GUI
- Federation:提供跨可用区的集群
- Fluentd-elasticsearch:提供集群日志采集、存储与查询
Kubernetes设计理念和功能其实就是一个类似Linux的分层架构:
- 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
- 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)
- 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
- 接口层:kubectl命令行工具、客户端SDK以及集群联邦
- 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴
- Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等
- Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等
二、Kubernetes部署
关闭节点的selinux和iptables防火墙
所有节点(server1、2、3)部署docker引擎
yum install -y docker-ce
systemctl start docker.service
systemctl enable docker.service
查看docker信息 :
docker info
消除docker中存在的警告,将bridge-nf-call-iptables和bridge-nf-call-ip6tables开启
vim /etc/sysctl.conf
###
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
###
sysctl --system # 生效
可以看到,警告已经消除,可正常使用。
编辑harbor配置文件 :
vim harbor.yml
运行检测环境 :
./install.sh
可以看到,缺少 docker-compose[单台主机上维护多个容器] 环境
下载并搭建docker-compose环境 :
mv docker-compose-Linux-x86_64-1.24.1 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
三个节点docker-ce的下载和安装
这里可以使用之前自己的docker,也可以使用清华或者阿里的docker。
安装系统工具:
yum install -y yum-utils device-mapper-persistent-data lvm2
部署docker仓库 :
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker-ce :
下载container-selinux并安装 :
将安装包上传到共享仓库上 :
更新仓库repo数据 :
在k8s1将docker.repo复制给k8s3和k8s4
scp docker-ce.repo k8s3:/etc/yum.repos.d/
在k8s3和k8s4安装docker
yum install -y docker-ce
启用,使其 docker info 正常使用 :
vim /etc/sysctl.conf
###
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
###
sysctl --system # 生效
启动并设置为开机自启
systemctl enable --now docker.service
kubernetes部署
官方网站:https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/#docker
安装部署kubernetes前系统环境的配置
设置docker守护程序[三个节点都需要]
修改k8s2中docker守护程序
cat > /etc/docker/daemon.json <
重点:native.cgroupdriver 修改为 systemd 模式
原先的模式为:
重启docker
systemctl restart docker.service
可以看到,Cgroup Driver 已经修改为 systemd 的模式
将文件复制到k8s3和k8s4上,并重启docker
禁用swap[三个k8s集群节点都需要]
swapoff -a
vim /etc/fstab
###
#/dev/mapper/rhel-swap swap swap defaults 0 0
###
部署kubernetes
安装Docker-ce
这个前面已经进行了详细的介绍
设置仓库[三个节点均设置]
vim /etc/yum.repos.d/k8s.repo
###
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7- x86_64/
enabled=1
gpgcheck=0
###
安装软件包[三个节点均安装]
yum install -y kubelet kubeadm kubectl