k8s:离线部署存在的相关问题
摘要:本文解决三个常见Kubernetes环境问题:1) 编译docker-compose时缺少Go环境,通过安装Go1.24.4并配置环境变量解决;2) node节点kubectl连接APIServer失败,需从master节点拷贝admin.conf配置文件;3) node节点从Harbor拉取镜像时证书验证失败,需配置CA证书。每个问题均包含详细错误现象、原因分析及操作步骤说明,涉及环境变量配置、kubeconfig文件结构解析等关键知识点。
问题1:没有go语言问题
如何源代码编译docker-compose,详见《编译docker-compose linux x86-64》
现象
手动编译docker-compose报如下错误:
GO111MODULE=on go build -trimpath -tags "e2e" -ldflags "-w -X github.com/docker/compose/v2/internal.Version=2.37.2" -o "./bin/build/docker-compose" ./cmd
/bin/sh: go: command not found
make: *** [Makefile:61: build] Error 127
解决方案
步骤 1:拷贝到目标机器
scp go1.24.4.linux-amd64.tar.gz root@172.23.123.118:/app/KubeSphere/docker
步骤 2:上传并解压到离线机器
sudo tar -C /usr/local -xzf go1.24.4.linux-amd64.tar.gz
步骤 3:设置环境变量
编辑你的 shell 配置文件(如 ~/.bashrc 或 ~/.zshrc):
#vi ~/.bashrc
export PATH=/usr/local/go/bin:$PATH
export GOPROXY=https://goproxy.cn,direct
source ~/.bashrc
步骤 4:查看版本
#go version
问题2:kubectl 无法连接到 Kubernetes API Server 的典型错误
现象
node节点执行
kubectl get nodes
报如下错误:
E0720 12:10:35.833702 28059 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
The connection to the server localhost:8080 was refused - did you specify the right host or port?
原因
这是 kubectl 无法连接到 Kubernetes API Server 的典型错误。
具体说明:
kubectl 默认尝试连接 localhost:8080,但这个地址上没有运行 API Server。
这通常是因为:
Kubernetes 集群 没有在本机运行,本机是在一个 worker 节点
你没有配置正确的 kubectl 配置文件(~/.kube/config)
解决方案:
node节点主机执行
mkdir -p ~/.kube
从mastger主机拷贝admin.conf文件到node解读
scp /etc/kubernetes/admin.conf root@172.23.123.118:~/.kube/config
节点主机再执行
kubectl get nodes
config是 Kubernetes 用来认证用户、连接集群、操作 API 的核心配置文件。
文件结构概览
这个 kubeconfig 文件主要包含以下几个部分:
部分 | 说明 |
clusters | 定义了连接的 Kubernetes 集群信息 |
users | 定义了用户的认证信息(如证书、密钥) |
contexts | 将用户和集群绑定,定义当前上下文 |
current-context | 当前使用的上下文 |
问题3:node节点从Harbor拉取image报错
现象:
在node节点执行
crictl pull 172.23.123.117:8443/kubesphereio/pause:3.9报如下错误:
FATA[0000] pulling image: failed to pull and unpack image "172.23.123.117:8443/kubesphereio/pause:3.9": failed to resolve reference "172.23.123.117:8443/kubesphereio/pause:3.9": failed to do request: Head "https://172.23.123.117:8443/v2/kubesphereio/pause/manifests/3.9": tls: failed to verify certificate: x509: certificate signed by unknown authority: Process exited with status 1
解决方案:
详见《CA证书配置》