初始化k8s
我了解有下列一键部署k8s,第一个是网友推荐,第二个是kuboard上面推荐
- fanux/sealos: 一条命令离线安装高可用 Kubernetes🔥 ⎈ 🐳不依赖haproxy keepalived
- eip-work/kuboard-spray: 使用图形化的界面离线安装、维护高可用的 K8S 集群基于kubespray
目前使用 sealos来一键初始化kubernetes环境
一、准备
- hostname不能重名
- 服务过程中会自动关闭防火墙
- 需要保证节点服务的可访问
- 默认使用containerd而不是docker为容器平台
1 | # 下载并安装sealos, sealos是个golang的二进制工具,直接下载拷贝到bin目录即可, release页面也可下载 |
1.1 常见问题
1.1.1初始化失败
现象如下:
generator kubeconfig failed couldn’t create a kubeconfig
container runtime is not running: output
解决方法: 不用安装docker和其他服务,服务器只需要wget 服务
1.1.2kubectl get pod
The connection to the server localhost:8080 was refused - did you specify the right host or port?
解决方法: 将主节点的 admin.conf 拷到对应节点后配置环境变量
1 | scp /etc/kubernetes/admin.conf 192.168.31.133:/etc/kubernetes |
二、kuboard安装
在 K8S 中安装 Kuboard v3 | Kuboard
我选择使用 hostPath 提供持久化而不是 StorageClass 提供持久化(还没有创建)
界面如下
三、使用kubectl来创建pod并部署
命令来创建,部署
注意kubectl 需要指定namespace的值,否则默认是default
kubectl get pod No resources found in default namespace.
3.1. 创建nginx镜像
kubectl run nginx –image=nginx –port=80
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 83s
3.2. 部署nginx
kubectl create deployment nginx –image=nginx
deployment.apps/nginx created
否则 运行下面命令会出现没有部署服务
kubectl get deployment
No resources found in default namespace.
3.3. nginx端口暴露能被外部访问
kubectl expose deployment nginx –port=80 –type=LoadBalancer
3.4. 查看pod的信息
kubectl describe service nginx
Name: nginx
Namespace: default
Labels: app=nginx
Annotations:
Selector: app=nginx
Type: LoadBalancer
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.109.244.210
IPs: 10.109.244.210
Port:80/TCP
TargetPort: 80/TCP
NodePort:30682/TCP
Endpoints: 100.118.167.130:80
Session Affinity: None
External Traffic Policy: Cluster
Events:
kubectl get pods –all-namespaces
配置文件来部署
1 | apiVersion: apps/v1 |
kubectl apply -f nginx-deployment.yaml
3.5常见问题
3.5.1 k8s某个节点挂掉
如果遇到k8s某个节点挂掉,但是服务器还是可以连接的情况,说明是服务器节点通信问题,首先参考下面的连接查看日志和对应端口是否是正常的
服务器重启后kubernetes无法启动的原因 - 数据库敲门人
查看日志的命令如下
journalctl -u kubelet.service
journalctl -xefu kubelet
查看节点命令如下
kubectl get node –watch
重启kubelet的服务
systemctl restart kubelet
查看端口的连接情况
netstat -nap|grep 6443
The connection to the server apiserver.cluster.local:6443 was refused - did you specify the right host or port?
使用的是sealons重新添加该集群
建议可以使用 sealos delete 删除掉线的节点
然后再使用 sealos join 命令能把节点重新加入到集群中
3.5.2 容器运行时报错Network plugin returns error
日志如下
cat /var/log/pods/kube-system_kube-apiserver-master2_d653fc9e62a54eaa54def1ae5c0dde56/kube-apiserver
container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized
首先查看kube-system中NetworkPlugin是否存在
kubectl get pod -n kube-system
k8s中存在网络插件一般包括**Choose network plugin (cilium, calico, contiv, weave or flannel)**,我看着初始化的是calico
同时查看对应calico的日志
kubectl logs calico-node-rkqkq –namespace=kube-system
kubectl get pods -o wide -A
查看对应的配置信息
kubectl describe pod calico-node-rkqkq –namespace=kube-system
配置文件存放地址 /root/kube/conf/calico.yaml
下面推荐的解决方案:
kubeadm - Calico: Kubernetes pods can’t ping each other use Cluster IP - Stack Overflow
kubectl delete-f /etc/kubernetes/addons/calico.yaml
kubenates启动calico-node时,有节点总是报错CrashLoopBackOff_dkgee-CSDN博客
四、部署minio和创建volumeclass
根据官方文档可以找到
Deploy MinIO Operator on Kubernetes — MinIO Hybrid Cloud Documentation
operator/README.md at master · minio/operator
需要 Installing · Krew或者minio/helm/minio at master )包管理软件
4.1使用krew初始化minio
我选择krew包管理,需要使用到git命令
然后运行下面这段内容
1 | ( |
运行过程中出了问题 变量${KREW}=krew-linux_amd64
我是下载 https://github.com/kubernetes-sigs/krew/releases/latest/download/krew-linux_amd64.tar.gz、
export PATH=”$HOME/.krew}/bin:$PATH”
目前使用kuboard web界面管理k8s集群
存储类StorageClass | Kuboard但是目前只支持界面配置 cephfs,nfs
Storage Classes | Kubernetes 官方支持的volumeclass也没有minio需要手写 yml的配置文件