Kubernetes多集群与多节点集群搭建指南
1. 使用kubectl管理多集群或命名空间
1.1 配置kubeconfig文件位置
kubectl使用的配置文件通常存储在 ~/.kube/config 中。若存储在其他位置,需设置 KUBECONFIG 环境变量指向该位置。可以使用多个配置文件,在 KUBECONFIG 环境变量中用冒号分隔指定即可。
1.2 理解kubeconfig文件内容
kubeconfig文件包含四个部分:
- 集群列表
- 用户列表
- 上下文列表
- 当前上下文名称
以下是一个示例配置文件:
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/luksa/.minikube/ca.crt
server: https://192.168.99.100:8443
name: minikube
contexts:
- context:
cluster: minikube
user: minikube
namespace: default
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /home/luksa/.minikube/apiserver.crt
client-key: /home/luksa/.minikube/apiserver.key
各部分含义如下:
| 部分 | 含义 |
| ---- | ---- |
| clusters | 包含Kubernetes集群的信息,如API服务器URL、证书颁发机构文件等 |
| contexts | 定义kubectl使用的上下文,将集群、用户和默认命名空间关联起来 |
| current-context | 当前kubectl使用的上下文 |
| users | 包含用户的凭证信息 |
1.3 列出、添加和修改kube配置条目
1.3.1 添加或修改集群
使用 kubectl config set-cluster 命令添加或修改集群:
$ kubectl config set-cluster my-other-cluster
➥ --server=https://k8s.example.com:6443
➥ --certificate-authority=path/to/the/cafile
若同名集群已存在,该命令将覆盖其配置选项。
1.3.2 添加或修改用户凭证
添加或修改用户凭证与添加或修改集群类似。使用用户名和密码认证时:
$ kubectl config set-credentials foo --username=foo --password=pass
使用基于令牌的认证时:
$ kubectl config set-credentials foo --token=mysecrettokenXFDJIQ1234
1.3.3 关联集群和用户凭证
使用 kubectl config set-context 命令创建新上下文:
$ kubectl config set-context some-context --cluster=my-other-cluster
➥ --user=foo --namespace=bar
也可使用该命令更改当前上下文的命名空间:
$ kubectl config current-context
minikube
$ kubectl config set-context minikube --namespace=another-namespace
为方便在命名空间之间切换,可定义别名:
alias kcd='kubectl config set-context $(kubectl config current-context) --namespace '
1.4 使用kubectl与不同集群、用户和上下文
运行kubectl命令时,默认使用kubeconfig中当前上下文定义的集群、用户和命名空间,可通过以下命令行选项覆盖:
- --user :使用kubeconfig文件中不同的用户
- --username 和 --password :使用不同的用户名和/或密码
- --cluster :使用不同的集群
- --server :指定不同服务器的URL
- --namespace :使用不同的命名空间
1.5 切换上下文
使用 kubectl config use-context 命令切换上下文:
$ kubectl config use-context my-other-context
1.6 列出上下文和集群
列出所有上下文:
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* minikube minikube minikube default
rpi-cluster rpi-cluster admin/rpi-cluster
rpi-foo rpi-cluster admin/rpi-cluster foo
列出所有集群:
$ kubectl config get-clusters
NAME
rpi-cluster
minikube
出于安全原因,凭证信息无法列出。
1.7 删除上下文和集群
使用以下命令删除上下文和集群:
$ kubectl config delete-context my-unused-context
$ kubectl config delete-cluster my-old-cluster
2. 使用kubeadm搭建多节点集群
2.1 设置操作系统和所需软件包
2.1.1 下载并安装VirtualBox
若未安装VirtualBox,可从 https://www.virtualbox.org/wiki/Downloads 下载安装。
2.1.2 下载CentOS 7最小ISO镜像
从 www.centos.org/download 下载CentOS 7最小ISO镜像,也可使用其他受支持的Linux发行版。
2.2 创建虚拟机
在VirtualBox中创建Kubernetes主节点的虚拟机:
1. 点击左上角的“New”图标。
2. 输入名称“k8s-master”,选择“Linux”作为类型,“Red Hat (64-bit)”作为版本。
3. 点击“Next”,设置虚拟机内存大小,建议至少2GB。
4. 创建硬盘时,保持默认选项:
- 硬盘文件类型:VDI (VirtualBox Disk Image)
- 物理硬盘存储方式:动态分配
- 文件位置和大小:k8s-master,大小8GB
2.3 配置虚拟机网络适配器
为确保虚拟机能够正常运行多节点集群,需将网络适配器配置为桥接模式:
1. 在VirtualBox主窗口中选择虚拟机,点击“Settings”图标。
2. 在左侧选择“Network”,在右侧主面板中选择“Attached to: Bridged Adapter”。
3. 在“Name”下拉菜单中选择主机用于连接网络的适配器。
2.4 安装操作系统
2.4.1 选择启动磁盘
在启动虚拟机前,VirtualBox会询问启动磁盘,点击下拉列表旁边的图标,选择之前下载的CentOS ISO镜像,然后点击“Start”启动虚拟机。
2.4.2 开始安装
虚拟机启动后,使用光标上键选择“Install CentOS Linux 7”选项,按“Enter”键开始安装。
2.4.3 设置安装选项
- 选择语言,建议保持为英语,点击“Continue”进入主设置屏幕。
- 点击“Installation Destination”,然后立即点击“Done”。
- 点击“Network & Host Name”,启用网络适配器,输入主机名“master.k8s”,点击“Apply”确认。
- 点击“Date & Time”,设置正确的时区,点击“Done”返回主屏幕。
2.4.4 开始安装
点击右下角的“Begin Installation”按钮开始安装操作系统。安装过程中,可设置root密码并创建用户账户。安装完成后,点击“Reboot”按钮重启虚拟机。
2.5 安装Docker和Kubernetes
2.5.1 禁用SELinux
临时禁用SELinux:
# setenforce 0
永久禁用SELinux,编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 SELINUX=permissive 。
2.5.2 禁用防火墙
# systemctl disable firewalld && systemctl stop firewalld
2.5.3 添加Kubernetes YUM仓库
# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://yum.kubernetes.io/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
EOF
2.5.4 安装所需软件包
# yum install -y docker kubelet kubeadm kubectl kubernetes-cni
安装的软件包及其作用如下:
| 软件包 | 作用 |
| ---- | ---- |
| docker | 容器运行时 |
| kubelet | Kubernetes节点代理,负责运行所有任务 |
| kubeadm | 用于部署多节点Kubernetes集群的工具 |
| kubectl | 与Kubernetes交互的命令行工具 |
| kubernetes-cni | Kubernetes容器网络接口 |
2.5.5 启用服务
# systemctl enable docker && systemctl start docker
# systemctl enable kubelet && systemctl start kubelet
2.5.6 启用内核选项
# sysctl -w net.bridge.bridge-nf-call-iptables=1
# echo "net.bridge.bridge-nf-call-iptables=1" > /etc/sysctl.d/k8s.conf
2.5.7 禁用交换分区
# swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab
2.6 克隆虚拟机
2.6.1 关闭虚拟机
# shutdown now
2.6.2 克隆虚拟机
在VirtualBox UI中右键点击虚拟机,选择“Clone”。输入新虚拟机的名称,如“k8s-node1”或“k8s-node2”,确保勾选“Reinitialize the MAC address of all network cards”选项。点击“Next”,选择“Full clone”选项,再次点击“Next”,最后点击“Clone”完成克隆。
2.6.3 更改克隆虚拟机的主机名
登录每个克隆节点(以root身份),运行以下命令更改主机名:
# hostnamectl --static set-hostname node1.k8s
注意,第二个节点的主机名应设置为“node2.k8s”。
2.6.4 配置所有主机的名称解析
为确保所有节点可解析,可向DNS服务器添加记录或编辑所有节点的 /etc/hosts 文件,例如:
192.168.64.138 master.k8s
192.168.64.139 node1.k8s
192.168.64.140 node2.k8s
通过以上步骤,你可以使用kubectl管理多集群和命名空间,并使用kubeadm搭建多节点Kubernetes集群。
2.7 多节点集群搭建流程总结
为了更清晰地展示使用kubeadm搭建多节点集群的流程,下面用mermaid流程图来呈现:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([开始]):::startend --> B(下载并安装VirtualBox):::process
B --> C(下载CentOS 7最小ISO镜像):::process
C --> D(创建虚拟机):::process
D --> E(配置虚拟机网络适配器):::process
E --> F(安装操作系统):::process
F --> G(安装Docker和Kubernetes):::process
G --> H(克隆虚拟机):::process
H --> I(更改克隆虚拟机的主机名):::process
I --> J(配置所有主机的名称解析):::process
J --> K([结束]):::startend
这个流程图清晰地展示了从准备工作到最终完成多节点集群搭建的整个过程。
2.8 多节点集群搭建注意事项
在搭建多节点集群的过程中,有一些关键的注意事项需要我们特别关注:
- 网络配置 :虚拟机的网络适配器配置为桥接模式是确保多节点正常通信的关键,一定要选择正确的主机网络适配器。
- SELinux和防火墙 :SELinux和防火墙可能会阻止Kubernetes组件之间的通信,所以需要临时或永久禁用它们。
- 交换分区 :Kubelet在交换分区启用的情况下无法正常运行,因此必须禁用交换分区。
- 主机名和名称解析 :确保每个节点的主机名唯一,并且所有节点之间能够通过名称解析相互访问。
3. 不同场景下kubectl的使用技巧
3.1 快速切换命名空间
在日常使用中,经常需要在不同的命名空间之间切换。除了前面提到的定义别名 kcd ,我们还可以通过下面的表格来对比不同方式的优缺点:
| 切换方式 | 优点 | 缺点 |
| ---- | ---- | ---- |
| 每次使用 --namespace 选项 | 简单直接,无需额外配置 | 每次都要输入,操作繁琐 |
| 使用 kubectl config set-context 命令 | 只需运行一次,后续使用方便 | 需要记住当前上下文名称 |
| 定义别名 kcd | 操作简单,快速切换 | 需要额外定义别名 |
3.2 多集群环境下的kubectl使用
在多集群环境中,我们可以根据不同的场景选择合适的方式来使用kubectl,以下是一个简单的决策树:
graph TD
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([开始]):::startend --> B{是否需要切换集群?}:::decision
B -->|是| C(使用`--cluster`选项或切换上下文):::process
B -->|否| D{是否需要切换用户?}:::decision
D -->|是| E(使用`--user`或`--username`/`--password`选项):::process
D -->|否| F{是否需要切换命名空间?}:::decision
F -->|是| G(使用`--namespace`选项或切换上下文):::process
F -->|否| H(使用当前上下文执行命令):::process
C --> I([结束]):::startend
E --> I
G --> I
H --> I
这个决策树可以帮助我们在多集群、多用户和多命名空间的环境中快速选择合适的kubectl使用方式。
4. 总结
通过本文的介绍,我们详细了解了使用kubectl管理多集群和命名空间的方法,以及使用kubeadm搭建多节点Kubernetes集群的具体步骤。在实际应用中,我们可以根据不同的需求灵活运用这些知识,提高Kubernetes集群的管理效率。同时,要注意在搭建和使用过程中的各种细节和注意事项,确保集群的稳定运行。希望这些内容能对你在Kubernetes的学习和实践中有所帮助。
超级会员免费看
1万+

被折叠的 条评论
为什么被折叠?



