k8s(Kubernetes)是一个开源的容器编排平台,支持多种部署方式。常见的 k8s 部署方式包括:基于二进制文件、kubeadm 工具、云服务提供商、容器镜像等方式。
下面对这些 k8s 部署方式进行简要介绍:
1. 基于二进制文件的部署方式
这种方式需要手动下载和安装 k8s 组件,包括 kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy 等组件,并手动配置参数和启动命令。适合需要自定义配置和精细控制的场景,但也需要花费更多的时间和精力进行维护和升级。
2. 使用 kubeadm 工具部署
kubeadm 是 k8s 官方推荐的工具,可以快速搭建 k8s 集群,并提供诸如更新、升级和故障修复等功能。使用 kubeadm 部署 k8s 集群通常会比较方便和快速,但需要满足一定的硬件和软件环境要求。
3. 云服务提供商的部署方式
目前市场上大多数云服务提供商都支持 k8s 部署方式,如 Amazon EKS、Microsoft AKS、Google GKE 等,可以通过这些服务快速搭建 k8s 集群,并享受云服务提供商提供的自动化运维、监控和弹性扩容等功能。
4. 使用容器镜像部署
这种方式将 k8s 组件以容器镜像的形式打包,并利用容器调度系统进行部署。适合在已经有容器编排系统的场景下使用,如 Docker-compose、Swarm、Mesos 等。
总体来说,k8s 部署方式有多种,可以根据不同的场景和需求选择合适的方式进行部署。需要注意的是,在部署 k8s 集群之前,需要对硬件和软件环境进行充分的规划和准备,以确保 k8s 集群的稳定和高可用性。
第一个部署方案指的是基于二进制文件的 k8s 部署方式。以下是一个详细的 k8s 二进制部署方案:
- 准备 k8s 组件
首先需要准备 k8s 组件,包括 kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy 等组件。可以从官方网站或 GitHub 等源获取最新版本的二进制文件。
- 安装 kubelet 和 kube-proxy
在所有节点上安装 kubelet 和 kube-proxy 组件,并设置为开机自启动。
sudo mv kubelet /usr/local/bin/
sudo mv kube-proxy /usr/local/bin/
sudo vi /etc/systemd/system/kubelet.service
# 编辑 kubelet.service 文件,添加下面内容:
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/kubernetes/kubernetes
[Service]
ExecStart=/usr/local/bin/kubelet
--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf
--kubeconfig=/etc/kubernetes/kubelet.conf
--config=/var/lib/kubelet/config.yaml
--hostname-override=
--pod-infra-container-image=k8s.gcr.io/pause:3.5
Restart=on-failure
KillMode=process
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
# 启动 kubelet 服务
sudo systemctl daemon-reload
sudo systemctl enable kubelet.service
sudo systemctl start kubelet.service
# 设置 kube-proxy
sudo vi /etc/systemd/system/kube-proxy.service
# 编辑 kube-proxy.service 文件,添加下面内容:
[Unit]
Description=Kubernetes Kube Proxy
Documentation=https://github.com/kubernetes/kubernetes
[Service]
ExecStart=/usr/local/bin/kube-proxy
--config=/var/lib/kube-proxy/config.conf
Restart=on-failure
KillMode=process
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
# 启动 kube-proxy 服务
sudo systemctl daemon-reload
sudo systemctl enable kube-proxy.service
sudo systemctl start kube-proxy.service
- 安装 kube-apiserver、kube-controller-manager 和 kube-scheduler
在 Master 节点上安装 kube-apiserver、kube-controller-manager 和 kube-scheduler 组件,并设置为开机自启动。
sudo mv kube-apiserver /usr/local/bin/
sudo mv kube-controller-manager /usr/local/bin/
sudo mv kube-scheduler /usr/local/bin/
sudo vi /etc/systemd/system/kube-apiserver.service
# 编辑 kube-apiserver.service 文件,添加下面内容:
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
ExecStart=/usr/local/bin/kube-apiserver
--advertise-address=
--allow-privileged=true
--etcd-servers=https://127.0.0.1:2379
--service-cluster-ip-range=10.96.0.0/12
--secure-port=6443
--tls-cert-file=/etc/kubernetes/pki/apiserver.crt
--tls-private-key-file=/etc/kubernetes/pki/apiserver.key
--kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
--kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
--service-account-key-file=/etc/kubernetes/pki/sa.pub
--enable-admission-plugins=NodeRestriction,PodSecurityPolicy
--audit-log-maxage=30
--audit-log-maxbackup=3
--audit-log-maxsize=100
--audit-log-path=/var/log/kubernetes/audit.log
--authorization-mode=Node,RBAC
--runtime-config=api/all
--allow-privileged=true
--requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
--proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
--proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
--enable-bootstrap-token-auth
--v=2
Restart=on-failure
KillMode=process
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
# 启动 kube-apiserver 服务
sudo systemctl daemon-reload
sudo systemctl enable kube-apiserver.service
sudo systemctl start kube-apiserver.service
# 设置 kube-controller-manager
sudo vi /etc/systemd/system/kube-controller-manager.service
# 编辑 kube-controller-manager.service 文件,添加下面内容:
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes
[Service]
ExecStart=/usr/local/bin/kube-controller-manager
--bind-address=
--leader-elect=true
--kubeconfig=/etc/kubernetes/controller-manager.conf
--service-cluster-ip-range=10.96.0.0/12
--cluster-name=kubernetes
--allocate-node-cidrs=true
--use-service-account-credentials=true
--cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt
--cluster-signing-key-file=/etc/kubernetes/pki/ca.key
--v=2
Restart=on-failure
KillMode=process
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
# 启动 kube-controller-manager 服务
sudo systemctl daemon-reload
sudo systemctl enable kube-controller-manager.service
sudo systemctl start kube-controller-manager.service
# 设置 kube-scheduler
sudo vi /etc/systemd/system/kube-scheduler.service
# 编辑 kube-scheduler.service 文件,添加下面内容:
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes
[Service]
ExecStart=/usr/local/bin/kube-scheduler
--address=
--leader-elect=true
--kubeconfig=/etc/kubernetes/scheduler.conf
--v=2
Restart=on-failure
KillMode=process
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
# 启动 kube-scheduler 服务
sudo systemctl daemon-reload
sudo systemctl enable kube-scheduler.service
sudo systemctl start kube-scheduler.service
- 验证 k8s 集群
执行以下命令验证 k8s 集群是否正常:
kubectl get nodes
kubectl version
在以上步骤中,我们手动下载
第二种部署方案指的是使用 kubeadm 工具部署 k8s 集群。以下是一个详细的 kubeadm 部署方案:
- 准备节点
在准备节点之前,需要满足以下要求:
- CentOS 7 / Ubuntu 16.04 及以上版本
- 2 个或以上的节点,1 个 Master 节点和 1 个或多个 Worker 节点
- 每个节点至少 2 CPU 和 2GB 内存
安装 Docker 并启动服务:
curl -fsSL https://get.docker.com | bash -
systemctl start docker
systemctl enable docker
- 安装 kubeadm 工具
从官方仓库下载并安装 kubeadm 工具:
# 添加 kubernetes 仓库
sudo vi /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
# 安装 kubeadm 工具
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
- 初始化 Master 节点
在 Master 节点上执行以下命令初始化 k8s 集群:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
执行成功后将输出 kubeadm join 命令,复制该命令以备后续使用。
- 配置 k8s 环境
在 Master 节点上执行以下命令设置 k8s 环境:
# 将当前用户的 kubeconfig 文件复制到默认目录下
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 安装网络插件(这里以 Calico 为例)
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
- 加入 Worker 节点
在 Worker 节点上执行第 3 步中复制的 kubeadm join 命令加入集群。
sudo kubeadm join : --token --discovery-token-ca-cert-hash sha256:
执行成功后,可以在 Master 节点上通过以下命令查看节点状态:
kubectl get nodes
至此,k8s 集群已经部署成功。
第三种部署方案指的是使用 kubespray 工具部署 k8s 集群。以下是一个详细的 kubespray 部署方案:
- 准备节点
在准备节点之前,需要满足以下要求:
- CentOS 7 / Ubuntu 16.04 及以上版本
- 2 个或以上的节点,1 个 Master 节点和 1 个或多个 Worker 节点
- 每个节点至少 2 CPU 和 2GB 内存
- 所有节点之间需要能够互相访问,建议在同一局域网内
- 安装 Python 和 Ansible
在所有节点上安装 Python 和 Ansible:
# CentOS 7
sudo yum install -y python-setuptools python-devel libffi-devel openssl-devel gcc
sudo easy_install pip
sudo pip install ansible==2.9.6
# Ubuntu 16.04 及以上版本
sudo apt-get update
sudo apt-get install -y python-setuptools python-dev libffi-dev libssl-dev build-essential
sudo easy_install pip
sudo pip install ansible==2.9.6
- 克隆 kubespray 仓库
在任意节点上执行以下命令克隆 kubespray 仓库:
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
- 配置集群
在 kubespray 目录下创建 inventory 文件:
cp -rfp inventory/sample inventory/mycluster
修改 inventory/mycluster 目录下的 inventory.ini 文件,配置集群信息:
[kube-master]
[kube-node]
...
[all:vars]
ansible_python_interpreter=/usr/bin/python3
cluster_name=kubernetes-cluster
container_manager=kubelet
docker_image_tag=v1.20.4
kube_version=v1.20.4
etcd_version=v3.4.14
kube_proxy_loadbalancer_exclude_cidrs=192.168.1.0/24
其中, 为 Master 节点的 IP 地址, 分别为 Worker 节点的 IP 地址。
- 部署集群
在 kubespray 目录下执行以下命令部署 k8s 集群:
# 带有需要下载 container image 的步骤
ansible-playbook -i inventory/mycluster/inventory.ini --user= --key-file= --become --become-user=root cluster.yml
# 不需要下载 container image 的步骤
ansible-playbook -i inventory/mycluster/inventory.ini --user= --key-file= --become --become-user=root cluster.yml --skip-tags=download
其中, 和 需替换为实际使用的 SSH 用户名和私钥文件路径。
执行成功后,可以在 Master 节点上通过以下命令查看节点状态:
kubectl get nodes
至此,k8s 集群已经部署成功。
第四种部署方案指的是使用 Rancher 工具部署 k8s 集群。以下是一个详细的 Rancher 部署方案:
- 准备节点
在准备节点之前,需要满足以下要求:
- CentOS 7 / Ubuntu 16.04 及以上版本
- 2 个或以上的节点,1 个 Master 节点和 1 个或多个 Worker 节点
- 每个节点至少 2 CPU 和 4GB 内存
- 所有节点之间需要能够互相访问,建议在同一局域网内
- 安装 Docker 和 Rancher
在所有节点上安装 Docker:
curl https://releases.rancher.com/install-docker/19.03.sh | sh
在 Master 节点上安装 Rancher:
docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:stable
- 设置 Rancher
在浏览器中访问 Master 节点的 IP 地址或域名,进入 Rancher 的 Web 界面,按照页面上的提示创建账户和项目,并添加节点。
添加节点时需要选择对应的操作系统和部署方式,以及选择使用的 k8s 版本。添加成功后,可以在 Rancher 的 Web 界面中查看节点状态。
- 创建 k8s 集群
在 Rancher 的 Web 界面中,进入项目页面,选择 k8s 集群标签页,点击创建 k8s 集群并按照页面上的提示完成配置。
选项包括 k8s 版本、节点数量和规格、网络插件、自动扩容等。创建成功后,可以在页面上查看集群状态和节点状态。
至此,k8s 集群已经部署成功,并且可以在 Rancher 的 Web 界面中方便地管理和操作集群。
希望以上4中方案能帮助到你们,麻烦一键三连!!!
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 故障分析 | MySQL 升级到 8.0 变慢问题分析
作者:操盛春 技术专家,任职于爱可生,专注研究 MySQL、OceanBase 源码。 本文来源:原创投稿 * 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 1. 背景介绍 前段时间,客户线上 MySQL 版本从 5.7.29 …