【Kubernetes】集群外使用 kubectl 命令连接集群

Kubectl 是 Kubernetes 的核心命令行工具,用于管理集群资源。本文将详细介绍如何从集群外部使用 Kubectl 命令,帮助您快速连接 Kubernetes 集群并执行操作。我们将提供实用的操作指南和具体示例!

  • 集群主机 Master: Linux_amd64
  • 集群外主机 Test:Linux_amd64
  • 集群外主机 Win:Windows_11_amd64

1、集群外 Linux 主机连接

1.1、准备工作

### 集群 Master:172.16.15.105 ###
# 查看集群状态,单节点集群
kubectl get node
kubectl get pod -A


### 集群外主机 Test:172.16.13.200 ###
# 无 kubectl 命令
kubectl get node
# 查看主机内核(amd 或 arm,此处 Test 主机为 amd)
uname -r

1.2、安装 kubectl

### 集群 Master:172.16.15.105 ###
# 查看集群 Master 节点的 config 文件位置($HOME/.kube/config)
ls $HOME/.kube
echo $HOME


### 集群外主机 Test:172.16.13.200 ###
# 下载集群对应的 kubelet,架构与 Test 主机相同
# curl -LO "https://dl.k8s.io/release/{version}/bin/linux/arm64/kubectl"
curl -LO "https://dl.k8s.io/release/v1.29.0/bin/linux/amd64/kubectl"

# 验证下载的 kubectl 执行文件(可选)
# 下载校验文件
# curl -LO "https://dl.k8s.io/release/{version}/bin/linux/arm64/kubectl.sha256"
curl -LO "https://dl.k8s.io/release/v1.29.0/bin/linux/amd64/kubectl.sha256"
# 基于校验文件验证 kubelet 可执行文件,验证通过输出 OK
echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check

# 安装 kubelet
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 安装成功查看版本
kubectl version
# 将集群 Master 节点的 config 文件($HOME/.kube/config),拷贝到集群外主机 $HOME/.kube/config
scp -r root@172.16.15.105:/root/.kube/config ./
mkdir -p $HOME/.kube
cp ./config $HOME/.kube/

# 使用 kubectl 命令连接集群
# 若 config 未放在 $HOME/.kube/ 目录下,可使用命令 kubectl --kubeconfig=【指定 config 】 get node
kubectl get node

1.3、验证 kubectl 可用

### 集群外主机 Test:172.16.13.200 ###
# 任意删除一个 pod
kubectl delete pod <podname> -n <namespace> --force --grace-period 0

2、集群外 Windows 主机连接

2.1、准备工作

### 集群 Master:172.16.15.105 ###
# 查看集群状态,单节点集群
kubectl get node
kubectl get pod -A


### 集群外主机 Win: 172.16.13.222 ###
# 下载 .exe 运行程序
https://dl.k8s.io/release/v1.29.0/bin/windows/amd64/kubectl.exe
# 下载 kubectl 校验文件
https://dl.k8s.io/v1.29.0/bin/windows/amd64/kubectl.exe.sha256
# 校验,下方两条命令输出的内容相同
CertUtil -hashfile kubectl.exe SHA256
type kubectl.exe.sha256

2.2、安装 kubectl

### 集群 Master:172.16.15.105 ###
# 查看 config 文件所在位置($HOME/.kube/config)
ls $HOME/.kube
echo $HOME


### 集群外主机 Win: 172.16.13.222 ###
# 将 kubectl 文件配置到 PATH 环境变量中,配置文件所在目录(配置完成后打开一个新的 CMD)
# 安装成功查看版本
kubectl version --client
# 将集群 Master 的 config 文件($HOME/.kube/config),拷贝到 windwos 主机的 ~/.kube/config
cd %USERPROFILE%
md .kube
scp -r root@172.16.15.105:/root/.kube/config .kube/
cd ./.kube
dir
# 使用 kubectl 命令连接集群
# 若 config 未放在 $HOME/.kube/ 目录下,可使用命令 kubectl --kubeconfig=【指定 config 】 get node
kubectl get node

2.3、验证 kubectl 可用

### 集群外主机 Win: 172.16.13.222 ###
# 任意删除一个 pod
kubectl delete pod <podname> -n <namespace> --force --grace-period 0

### 无法通过 kubectl 连接 Kubernetes 集群的原因及解决方案 #### 原因分析 1. **未正确配置 kubeconfig 文件** Kubernetes 集群默认需要加密方式访问,因此必须将部署生成的安全配置文件保存到当前用户的 `.kube` 目录下。如果此文件未正确配置或缺失,`kubectl` 将无法连接集群[^3]。 2. **认证失败** 如果客户端的证书(如 `client.crt` 和 `client.key`)或 CA 证书(`ca.crt`)无效或不匹配,`kubectl` 将无法完成身份验证[^5]。 3. **网络问题** 节点与主节点(Master)之间的通信中断可能导致 `kubectl` 无法连接到 API Server。例如,防火墙规则阻止了访问,或者 API Server 的地址配置错误[^2]。 4. **API Server 未正常运行** 如果 Kubernetes 集群的 API Server 服务未启动或异常退出,`kubectl` 将无法连接集群[^1]。 5. **缺少 CNI 网络插件** 在某些情况下,即使 API Server 正常运行,如果集群中缺少 CNI 网络插件,节点状态可能为 `NotReady`,这会影响 `kubectl` 的操作[^3]。 6. **版本不兼容** 如果 `kubectl` 客户端版本与 Kubernetes 集群的服务器版本不兼容,也可能导致连接失败[^1]。 --- #### 解决方案 1. **检查 kubeconfig 文件** 确保 `.kube/config` 文件已正确配置,并指向正确的 API Server 地址和证书文件。可以使用以下命令验证配置: ```bash kubectl config view ``` 2. **验证认证信息** 检查客户端证书是否有效,并确保其与 API Server 的 CA 证书匹配。可以通过以下命令测试连接: ```bash kubectl get nodes --v=9 ``` 如果出现认证错误,需重新生成证书并更新 kubeconfig 文件[^5]。 3. **排查网络问题** 确保本地机器能够访问 API Server 的地址和端口(默认为 `https://<master-ip>:6443`)。可以使用以下命令测试连接: ```bash curl -k https://<master-ip>:6443/version ``` 如果连接失败,检查防火墙规则或 DNS 配置[^2]。 4. **检查 API Server 状态** 登录到主节点,检查 API Server 服务是否正常运行: ```bash systemctl status kube-apiserver ``` 如果服务未启动,尝试重启服务并查看日志: ```bash journalctl -u kube-apiserver ``` 5. **安装 CNI 网络插件** 如果节点状态为 `NotReady`,可能是由于缺少 CNI 网络插件。可以安装一个 CNI 插件(如 Calico 或 Flannel)来解决此问题: ```bash kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml ``` 6. **检查版本兼容性** 确保 `kubectl` 客户端版本与 Kubernetes 集群的服务器版本兼容。如果不兼容,升级或降级 `kubectl` 版本以匹配集群版本[^1]。 --- ### 示例代码 以下是生成 kubeconfig 文件的示例命令: ```bash # 将安全配置文件复制到 .kube 目录 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 验证连接的示例命令: ```bash kubectl get nodes ``` --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值