文章目录
Kubernetes 部署方式
常见的K8S安装部署方式
- Minikube
- 用途:用于本地快速运行一个单节点微型K8S,适合学习、预览K8S特性。
- 部署地址:https://kubernetes.io/docs/setup/minikube
- Kubeadm
- 用途:提供
kubeadm init
和kubeadm join
命令,用于快速部署K8S集群,相对简单。 - 文档地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
- 用途:提供
- 二进制安装部署
- 用途:生产首选,从官方下载发行版的二进制包,手动部署每个组件和自签TLS证书,组成K8S集群。
- 下载地址:https://github.com/kubernetes/kubernetes/releases
- 备注:虽然手动部署较麻烦,但期间可以学习很多工作原理,也利于后期维护。
总结:
- Minikube:适合本地学习和预览K8S特性。
- Kubeadm:部署简单,适合快速搭建K8S集群,但管理难度较大,故障恢复速度较慢。
- 二进制部署:部署复杂,但管理方便,集群伸展性能好,稳定性高,适合生产环境。
Kubeadm与二进制部署的区别
- 二进制部署
- 部署难度:难
- 管理方便性:方便
- 集群伸展性能:好
- 稳定性:集群规模到达一定规模(几百个节点、上万个Pod)时,二进制部署的稳定性高于kubeadm。
- 故障恢复:宿主机起来后,进程也会自动起来,恢复速度快。
- Kubeadm部署
- 部署难度:简单
- 管理方便性:难
- 部署方式:以容器管理容器的方式部署组件及服务。
- 故障恢复:恢复速度比二进制慢,因为需要先启动宿主机,再启动进程,最后启动容器,集群才能恢复。
Kubernetes部署安装
环境配置
节点名称 | IP地址 | 托管服务/组件 |
---|---|---|
k8s集群master01 | 20.0.0.10 | kube-apiserver, kube-controller-manager, kube-scheduler, etcd |
k8s集群master02 | 20.0.0.66 | (备用master) |
k8s集群node01 | 20.0.0.58 | kubelet, kube-proxy, docker, etcd |
k8s集群node02 | 20.0.0.59 | kubelet, kube-proxy, docker, etcd |
etcd集群节点1 | 20.0.0.10 | etcd |
etcd集群节点2 | 20.0.0.58 | etcd |
etcd集群节点3 | 20.0.0.59 | etcd |
Kubernetes集群初始化配置(实验环境)
一、操作系统初始化配置
-
关闭防火墙
- 停止并禁用
firewalld
服务。 - 清除所有iptables规则。
systemctl stop firewalld systemctl disable firewalld iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
- 停止并禁用
-
关闭SELinux
- 临时关闭SELinux。
- 永久修改
/etc/selinux/config
文件,将SELinux设置为disabled
。
setenforce 0 sed -i 's/enforcing/disabled/' /etc/selinux/config
-
关闭Swap
- 临时关闭Swap。
- 永久禁用Swap,修改
/etc/fstab
文件,注释掉Swap相关行。
swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab
-
设置主机名
- 根据规划,使用
hostnamectl
命令设置各节点的主机名。
hostnamectl set-hostname [主机名]
- 根据规划,使用
-
添加Hosts
- 在
master
节点上,编辑/etc/hosts
文件,添加集群内其他节点的IP和主机名映射。
cat >> /etc/hosts << EOF 20.0.0.10 master01 20.0.0.58 node01 20.0.0.59 node02 EOF
- 在
-
调整内核参数
- 创建
/etc/sysctl.d/k8s.conf
文件,添加必要的内核参数配置。 - 应用配置。
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv6.conf.all.disable_ipv6=1 net.ipv4.ip_forward=1 EOF sysctl --system
- 创建
-
时间同步
- 安装
ntpdate
工具。 - 使用
ntpdate
同步时间。
yum install ntpdate -y ntpdate time.windows.com
- 安装
二、部署Docker引擎
-
安装依赖
- 在所有
node
节点上,安装yum-utils
、device-mapper-persistent-data
和lvm2
。
yum install -y yum-utils device-mapper-persistent-data lvm2
- 在所有
-
添加Docker仓库
- 使用
yum-config-manager
添加Docker的官方仓库。
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 使用
-
安装Docker
- 安装Docker CE、Docker CE CLI和
containerd.io
。
yum install -y docker-ce docker-ce-cli containerd.io
- 安装Docker CE、Docker CE CLI和
-
配置Docker
- 创建
/etc/docker
目录。 - 在
/etc/docker/daemon.json
文件中添加Docker的配置,包括镜像加速器、Cgroup Driver等。
mkdir /etc/docker cat > /etc/docker/daemon.json <<EOF { "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com", "https://docker.m.daocloud.io", "https://docker.1panel.live"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "1g", "max-file": "3" } } EOF
- 创建
-
启动并启用Docker服务
- 启动Docker服务。
- 设置Docker服务开机自启。
systemctl start docker.service systemctl enable docker.service
-
验证Docker配置
- 使用
docker info
命令检查Cgroup Driver是否配置正确。
docker info | grep "Cgroup Driver" Cgroup Driver: systemd
- 使用
------------------------------ 部署 etcd 集群 ------------------------------
etcd是一个分布式键值存储系统,用于在分布式系统中保存配置信息、元数据以及关键的共享状态。它是一个开源项目,最初由CoreOS开发并维护,现在由CNCF托管。etcd的设计目标是提供可靠的分布式存储,以支持分布式系统的一致性和高可用性。
关键特性:
- 分布式存储:etcd的数据存储是分布式的,可以跨多个节点进行分布,确保高可用性和可扩展性。
- 强致性:etcd提供强一致性的保证,确保在集群中的所有节点都能看到相同的数据视图。
- 轻量级:etcd采用轻量级的Raft一致性算法,以确保集群中的节点之间达成一致,同时保持相对较低的性能开销。
- API支持:etcd提供简单而强大的HTTP+JSON API,使得开发人员可以轻松地与其进行交互,并集成到各种应用和工具中。
- Watch机制:etcd支持Watch机制,允许客户端监视特定键的变化,并在数据发生变更时得到通知。
- 安全性:etcd支持SSL/TLS加密,以保障数据在传输过程中的安全性,并提供基于角色的访问控制。
应用场景:
- 配置管理: etcd常用于存储应用程序和系统的配置信息,允许动态地更新配置而无需重启应用。
- 服务发现: etcd可以用作服务发现的后端存储,帮助服务在动态环境中找到彼此。
- 分布式锁: 通过etcd的分布式锁机制,可以实现分布式系统中的协同工作和资源同步。
- 集群协调: etcd在构建分布式系统中,作为集群协调的关键组件,确保系统的一致性和稳定性。
总体而言,etcd在云原生应用和分布式系统中发挥着重要作用,提供了可靠的分布式存储和协调服务,为应用程序提供一致性、可靠性和高可用性的基础设施支持。
etcd 目前默认使用2379端口提供HTTP API服务, 2380端口和peer通信(这两个端口已经被IANA(互联网数字分配机构)官方预留给etcd)。 即etcd默认使用2379端口对外为客户端提供通讯,使用端口2380来进行服务器间内部通讯。
etcd 在生产环境中一般推荐集群方式部署。由于etcd 的leader选举机制,要求至少为3台或以上的奇数台。
---------- 准备签发证书环境 ----------
CFSSL 是 CloudFlare 公司开源的