K8s配置的时候出现的常见问题
Q1: master节点kubectl get nodes 出现的错误
或者
解决方法:
cat <<EOF >> /root/.bashrc
export KUBECONFIG=/etc/kubernetes/admin.conf
EOF
source /root/.bashrc
重新执行 kubectl get nodes
记得需要查看一下自己的hosts文件
查看自己的 ip, 使用 ifconfig
进行替换相关的地址和自己的主机名
Q2 master节点拉取镜像失败
修改镜像地址为阿里的,注意每个安装有 kubelet 的节点都需要修改(master节点和worker节点都需要)
# 生成 config.toml 文件,我在解决第3个问题的时候删除了
containerd config default > /etc/containerd/config.toml
# 按照官网CRI部分修改如下两个配置
vim /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri"]
# sandbox_image = "registry.k8s.io/pause:3.6"
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"
…
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
# 然后:wq保存一下
# 记得需要重启一下
systemctl restart containerd
# 修改crictl.yaml的CRI
cat <<EOF | sudo tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
EOF
需要修改的地方截图如下:
Q3 master节点 kubeadm reset 错误
解决办法
# 删除/etc/cni/net.d目录
rm /etc/cni/net.d
# 重置ipvsadm表
ipvsadm --clear
# 检查$HOME/.kube/config文件的内容
Q4 master节点 kubectl init 拉去镜像失败
解决办法:
# 指定阿里云镜像去拉去 --kubernetes-version=版本号
kubeadm init --kubernetes-version=v1.28.2 --image-repository=registry.aliyuncs.com/google_containers
Q5 master节点没有证书密钥
解决办法:
Ubuntu安装golang-cfssl
sudo apt-get update
sudo apt-get install -y golang-cfssl
# 如果没有go环境需要执行下面命令先安装 golang
sudo apt-get install -y golang
创建一共ca-config文件:vim ca-config.json
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "8760h"
}
}
}
}
创建CA证书签名请求文件ca-csr.json
{
"CN": "Kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"O": "k8s",
"OU": "System"
}
]
}
生成证书密钥
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
创建一个名为admin-csr.json的文件
{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"O": "system:masters",
"OU": "Kubernetes The Hard Way"
}
]
}
然后,使用cfssl生成客户端证书和私钥
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin
最后拷贝文件到 /etc/kubernetes/pki 目录中
sudo cp admin.pem /etc/kubernetes/pki/admin.crt
sudo cp admin-key.pem /etc/kubernetes/pki/admin.key
最后执行kubectl get nodes
就可以正常查看自己的k8s集群了
Q6 kubeadm init 创建失败的问题
解决办法:
# 创建一共config文件
vim config.yaml
export KUBECONFIG=config.yaml
kubeadm init --kubernetes-version=v1.28.2 --image-repository=registry.aliyuncs.com/google_containers
config.yaml文件
apiVersion: v1
clusters:
- cluster:
certificate-authority: /etc/kubernetes/pki/ca.crt
server: https://<master-ip>:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate: /etc/kubernetes/pki/admin.crt
client-key: /etc/kubernetes/pki/admin.key
Q7 master没有ipvsadm
解决办法:
# 安装
apt install -y ipset ipvsadm
# 随后执行
cat > /etc/modules-load.d/kubernetes.conf << EOF
# /etc/modules-load.d/kubernetes.conf
# Linux 网桥支持
br_netfilter
# IPVS 加载均衡器
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
# IPv4 连接跟踪
nf_conntrack_ipv4
# IP 表规则
ip_tables
EOF
添加权限
chmod a+x /etc/modules-load.d/kubernetes.conf