本文将以 Markdown 格式展示 centos7 系统部署 k8s 集群详细介绍,以便更好地进行阅读。
系统环境
在进行 k8s 部署之前,我们需要准备好以下环境:
- 三台虚拟机,系统为 CentOS 7.x。
- 所有虚拟机 IP 需要互通,通常使用同一个网段,如 192.168.0.xx。
- 手机或电脑端,安装好 kubectl 命令行工具。
安装 Docker
Docker 是一个非常重要的组件,它用于构建和管理容器,而 k8s 实际上就是一个容器编排系统。因此,在进行 k8s 部署之前,我们需要先安装好 Docker。
推荐使用阿里云的 Docker 源加速,具体操作如下:
- 创建文件
/etc/docker/daemon.json
,输入以下内容:
{
"registry-mirrors": ["https://7gsphjav.mirror.aliyuncs.com"]
}
- 执行命令:
sudo systemctl daemon-reload
sudo systemctl restart docker
安装 kubeadm
kubeadm 是用于 k8s 集群的初始化和部署的工具,我们可以使用它来快速部署 k8s 集群。
首先,我们需要将 k8s 的 YUM 源添加到系统中,执行以下命令:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
然后,我们就可以安装 kubeadm 工具了:
yum install -y kubelet kubeadm kubectl
部署 k8s 集群
在所有节点上都安装好 Docker 和 kubeadm 之后,我们就可以开始部署 k8s 集群了。在这个部署过程中,我们需要以一台机器为“master”节点,其他两台机器为“worker”节点。
初始化 master 节点
接下来,我们需要在 master 节点上执行以下命令:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
其中,--pod-network-cidr
选项用于指定 k8s 集群中容器所使用的 IP 地址段。我们这里选择的是 10.244.0.0/16
,因为它是 Flannel 默认的 IP 地址段。
当命令执行完成后,会输出一段类似于以下的日志:
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join <master-ip-address>:<master-port> --token <token> \
--discovery-token-ca-cert-hash sha256:<hash>
这段日志包含了 k8s 的一些基础操作,我们需要将其中的命令进行复制,并在下一步中使用。
部署 Flannel 网络插件
Flannel 是一个 k8s 中常用的网络插件,它使用 VXLAN 技术来构建 k8s 集群内的通信网络。我们需要在 master 节点上执行以下命令:
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
在部署完成之后,我们可以运行以下命令来查看 k8s 集群的状态:
kubectl get nodes
如果 k8s 集群的状态显示为“Ready”,则表示我们已经成功地部署了一个 k8s 集群。
加入 worker 节点
接下来,我们需要将 worker 节点加入到 k8s 集群中。
在每台 worker 节点上执行操作时,需要将 master 节点输出的 kubeadm join 命令进行复制,并将命令中的 <master-ip-address>
替换为 master 节点的 IP 地址。例如:
sudo kubeadm join 192.168.0.2:6443 --token jvbylt.4avydvgo9our8zxd \
--discovery-token-ca-cert-hash sha256:3a366b7657559e32cd20f7a7b92138e2b0926b307ee937423ca1301962cf8aa3
示例1:部署 Nginx 应用
在 k8s 集群中部署一个 Nginx 应用,我们需要创建一个配置文件,如下所示,并执行命令 kubectl apply -f nginx.yaml
。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
示例2:部署 MySQL 数据库
在 k8s 集群中部署一个 MySQL 数据库,我们需要创建一个配置文件,如下所示,并执行命令 kubectl apply -f mysql.yaml
。
apiVersion: v1
kind: Pod
metadata:
name: mysql
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:latest
env:
- name: MYSQL_ROOT_PASSWORD
value: rootpassword
ports:
- containerPort: 3306
name: mysql
在以上两个示例中,我们使用 Docker Hub 上的镜像构建了一个 Nginx 应用和一个 MySQL 数据库,并使用了 k8s 的 yaml 文件来进行部署。在实际的应用中,我们可以根据需要来编写不同的 yaml 配置文件,并使用 kubectl apply
命令来进行部署和管理。