部署成功截图:
要在 Kubernetes (K8s) 集群中拉取 Grafana 镜像并创建 Grafana 容器,您可以按照以下步骤使用命令行完成操作。下面是完整的命令步骤,包括如何创建 Deployment 和 Service,以及如何将 Grafana 容器暴露给外部。
1. 创建一个 Deployment 文件 (grafana-deployment.yaml)
首先,您需要创建一个 Kubernetes Deployment 来运行 Grafana 容器。使用以下命令来创建该文件。
cat <<EOF > grafana-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
namespace: kube-pm # 可以根据需要修改命名空间
spec:
replicas: 1 # 创建一个副本
selector:
matchLabels:
app: grafana
template:
metadata:
labels:
app: grafana
spec:
containers:
- name: grafana
image: grafana/grafana:9.5.3 # 拉取的 Grafana 镜像版本
imagePullPolicy: IfNotPresent # 如果本地没有该镜像,则会拉取
ports:
- containerPort: 3000 # Grafana 服务监听的端口
env:
- name: GF_SECURITY_ADMIN_USER
value: admin
- name: GF_SECURITY_ADMIN_PASSWORD
value: admin123
resources:
limits:
cpu: "250m"
memory: "512Mi"
requests:
cpu: "250m"
memory: "512Mi"
readinessProbe:
httpGet:
path: /api/health
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
livenessProbe:
httpGet:
path: /api/health
port: 3000
initialDelaySeconds: 60
periodSeconds: 10
EOF
2. 创建一个 Service 文件 (grafana-service.yaml)
然后,创建一个 Kubernetes Service 来暴露 Grafana 服务,让它可以通过集群外部访问。
cat <<EOF > grafana-service.yaml
apiVersion: v1
kind: Service
metadata:
name: grafana
namespace: kube-pm # 与 Deployment 使用相同的命名空间
spec:
type: NodePort # 使用 NodePort 类型
ports:
- port: 3000 # 容器端口
targetPort: 3000 # 服务端口
nodePort: 31474 # 外部访问的端口
selector:
app: grafana
EOF
3. 创建 PersistentVolume 和 PersistentVolumeClaim 文件 (grafana-pv-pvc.yaml)
Grafana 会将数据(如 dashboard 和插件)保存在 /var/lib/grafana 目录下,因此需要持久化存储数据。下面是 PersistentVolume 和 PersistentVolumeClaim 的创建命令。
cat <<EOF > grafana-pv-pvc.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: grafana-local
labels:
app: grafana
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 1Gi
storageClassName: local-storage
local:
path: /data/k8s/grafana # 确保宿主机节点上该路径存在并具有适当权限
persistentVolumeReclaimPolicy: Retain
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- k8swork2 # 选择正确的节点
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: grafana-data
namespace: kube-pm
spec:
selector:
matchLabels:
app: grafana
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: local-storage
EOF
4. 执行命令部署 Grafana
接下来,使用 kubectl 命令将这些 YAML 文件应用到 Kubernetes 集群中。
1). 部署 PersistentVolume 和 PersistentVolumeClaim:
kubectl apply -f grafana-pv-pvc.yaml
2). 部署 Grafana Deployment:
kubectl apply -f grafana-deployment.yaml
3). 部署 Grafana Service:
kubectl apply -f grafana-service.yaml
5. 验证部署
您可以使用以下命令来检查 Pods 和服务是否正常工作:
1). 查看 Grafana Pods 状态:
kubectl get pods -n kube-pm -l app=grafana
2). 查看 Grafana 服务:
kubectl get svc -n kube-pm
6. 访问 Grafana
如果所有资源都创建成功并且 Pod 正在运行,您就可以通过浏览器访问 Grafana:
http://<任意节点IP>:31474
这里的 <任意节点IP></任意节点IP>`` 是 Kubernetes 集群中任何一个节点的 IP 地址。例如,如果节点的 IP 是 192.168.1.100,那么 Grafana 将通过 http://192.168.1.100:31474` 访问。
总结
以上步骤展示了如何:
使用 kubectl 创建一个 Deployment 来拉取 Grafana 镜像并启动容器。
使用 Service 暴露 Grafana 服务。
配置持久化存储,确保 Grafana 的数据不会丢失。