前言:
出于安全考虑,一般都不会直接在K8S集群的节点上操作,而是通过一台跳板机远程控制。
下面我们在一台linux设备安装配置kubectl,使其能够访问指定K8S集群。
要求:
官方要求kubectl 版本和集群版本之间的差异必须在一个小版本号内。 例如:v1.29 版本的客户端能与 v1.28、 v1.29 和 v1.30 版本的控制面通信。
为了避免出现莫名奇妙的问题,最好与集群版本保持一致。
#查看K8S集群使用kubectl版本root@master:/# kubectl version Client Version: v1.29.0Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3Server Version: v1.29.0
一、开始安装:
1、用 curl 在 Linux 系统中安装 kubectl
1.1、用以下命令在 Linux x86-64 中下载 1.29.3 版本(其他版本请替换版本号):
curl -LO https://dl.k8s.io/release/v1.29.3/bin/linux/amd64/kubectl
1.2、验证该可执行文件(可选步骤)
下载 kubectl 校验和文件(下载的 kubectl 与校验和文件版本必须相同):
curl -LO "https://dl.k8s.io/release/v1.29.3/bin/linux/amd64/kubectl.sha256"
基于校验和文件,验证 kubectl 的可执行文件:
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check
验证通过时,输出为:
kubectl: OK
验证失败时,sha256
将以非零值退出,并打印如下输出:
kubectl: FAILEDsha256sum: WARNING: 1 computed checksum did NOT match
1.3、安装 kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
说明:
如果没有系统的 root 权限,可以将 kubectl 安装到目录 ~/.local/bin
中:
chmod +x kubectlmkdir -p ~/.local/binmv ./kubectl ~/.local/bin/kubectl#将 ~/.local/bin 附加(或前置)到 $PATHecho 'export PATH="~/.local/bin:$PATH"' >> ~/.bashrcsource ~/.bashrc
1.4、执行测试,查看版本:
kubectl version --client
2、用原生包管理工具安装
2.1、基于RedHat的发行版
2.1.1、 添加 Kubernetes 的 yum
仓库。如果你想使用 v1.29 之外的 Kubernetes 版本, 将下面命令中的 v1.29 替换为所需的次要版本。
# 这会覆盖 /etc/yum.repos.d/kubernetes.repo 中现存的所有配置cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/enabled=1gpgcheck=1gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.keyEOF
说明:
要将 kubectl 升级到别的次要版本,你需要先升级 /etc/yum.repos.d/kubernetes.repo
中的版本,再运行 yum update
命令。 更详细的步骤可以在更改 Kubernetes 软件包存储库中找到。
2.1.2、使用 yum
安装 kubectl:
sudo yum install -y kubectl-1.29.3
2. 2、基于Dibian的发行版
2.2.1、 更新 apt
包索引,并安装使用 Kubernetes apt
仓库所需要的包:
sudo apt-get update# apt-transport-https 可以是一个虚拟包;如果是这样,你可以跳过这个包sudo apt-get install -y apt-transport-https ca-certificates curl
2.2.2、下载 Kubernetes 软件包仓库的公共签名密钥。 同一个签名密钥适用于所有仓库,因此你可以忽略 URL 中的版本信息:
# 如果 `/etc/apt/keyrings` 目录不存在,则应在 curl 命令之前创建它,请阅读下面的注释。# sudo mkdir -p -m 755 /etc/apt/keyringscurl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpgsudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg # allow unprivileged APT programs to read this keyring
说明:
在低于 Debian 12 和 Ubuntu 22.04 的发行版本中,/etc/apt/keyrings
默认不存在。 应在 curl 命令之前创建它。
2.2.3、添加合适的 Kubernetes apt
仓库。如果你想用 v1.29 之外的 Kubernetes 版本, 请将下面命令中的 v1.29 替换为所需的次要版本:
# 这会覆盖 /etc/apt/sources.list.d/kubernetes.list 中的所有现存配置echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo chmod 644 /etc/apt/sources.list.d/kubernetes.list # 有助于让诸如 command-not-found 等工具正常工作
说明:
要将 kubectl 升级到别的次要版本,你需要先升级 /etc/apt/sources.list.d/kubernetes.list
中的版本, 再运行 apt-get update
和 apt-get upgrade
命令。 更详细的步骤可以在更改 Kubernetes 软件包存储库中找到。
2.2.4、更新 apt
包索引,然后安装 kubectl:
sudo apt-get updatesudo apt-get install -y kubectl-1.29.3
二、验证 kubectl 配置
为了让 kubectl 能发现并访问 Kubernetes 集群,你需要一个kubeconfig文件。 通常,kubectl的配置信息存放于文件 ~/.kube/config
中。
mkdir ~/.kube #将集群的config文件放在此目录
kubectl cluster-info
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.Unable to connect to the server: dial tcp: lookup master on 192.168.10.2:53: no such host
将配置文件config里server项master替换成master主机IP
server: https://master:6443
或者在hosts文件添加master主机的解析
echo '192.168.10.60 master' >> /etc/hosts
再次验证,成功链接到指定K8S集群
[root@test02 ~]# kubectl cluster-infoKubernetes control plane is running at https://master:6443CoreDNS is running at https://master:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.[root@test02 ~]# [root@test02 ~]# kubectl get nodeNAME STATUS ROLES AGE VERSIONmaster Ready control-plane 85d v1.29.0node01 NotReady worker 85d v1.29.0node02 NotReady worker 85d v1.29.0[root@test02 ~]# [root@test02 ~]# kubectl get pod -n kube-systemNAME READY STATUS RESTARTS AGEcoredns-857d9ff4c9-w8hxr 1/1 Running 0 108mcoredns-857d9ff4c9-x5rj5 1/1 Running 0 108metcd-master 1/1 Running 10 (115m ago) 85dkube-apiserver-master 1/1 Running 10 (115m ago) 85dkube-controller-manager-master 1/1 Running 11 (115m ago) 85dkube-proxy-5kwqj 1/1 Running 10 (115m ago) 85dkube-proxy-7p48k 1/1 Running 9 (2d12h ago) 85dkube-proxy-f4lgd 1/1 Running 0 85dkube-scheduler-master 1/1 Running 11 (115m ago) 85d