hostname | IP-адрес | Версия операционной системы | версия k8s | Роль |
---|---|---|---|---|
k8s-master | 192.168.3.201 | centos7.6 | v1.27.4 | главный узел |
k8s-node01 | 192.168.3.202 | centos7.6 | v1.27.4 | рабочий узел |
k8s-node02 | 192.168.3.203 | centos7.6 | v1.27.4 | рабочий узел |
Kubernetes (сокращенно «k8s») — это платформа с открытым исходным кодом для автоматизации развертывания, масштабирования и управления контейнерными приложениями. Kubernetes изначально был разработан и открыт компанией Google, чтобы помочь разработчикам легче развертывать приложения и управлять ими, а также лучше использовать преимущества облачных вычислений. Kubernetes предоставляет масштабируемую систему для автоматизации развертывания, масштабирования и управления контейнерными приложениями и сервисами. Он может управлять несколькими контейнерными приложениями и службами и обеспечивает согласованный способ развертывания, масштабирования и управления приложениями, что упрощает обслуживание приложений.
1. Эта практика заключается в развертывании инструмента для создания заметок в среде k8s;
2. В файле приложения Flatnotes.yaml появляется ошибка «Развертывание в версии «v1» не может быть обработано как развертывание…».
При применении файла Flatnotes.yaml возникает следующая ошибка.
[root@k8s-master flatnotes]# kubectl apply -f flatnotes.yaml
namespace/flatnotes created
service/my-flatnotes created
Error from server (BadRequest): error when creating "flatnotes.yaml": Deployment in version "v1" cannot be handled as a Deployment: json: cannot unmarshal number into Go struct field EnvVar.spec.template.spec.containers.env.value of type string
Содержимое файла развертывания Flatnotes.yaml следующее:
[root@k8s-master flatnotes]# cat flatnotes.yaml
########################## Aplication#####################################################
---
apiVersion: v1
kind: Namespace
metadata:
name: flatnotes
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: flatnotes
name: flatnotes
namespace: flatnotes
spec:
replicas: 2
selector:
matchLabels:
app: flatnotes
template:
metadata:
labels:
app: flatnotes
spec:
volumes:
- name: data
hostPath:
path: /data/flatnotes/data/
initContainers:
- name: volume-permissions
image: busybox:1.28
imagePullPolicy: IfNotPresent
command:
- sh
- -c
- chmod -R 777 /data/flatnotes/data/
volumeMounts:
- name: data
mountPath: /data/flatnotes/data/
containers:
- image: dullage/flatnotes:latest
name: my-flatnotes
ports:
- name: web
protocol: "TCP"
containerPort: 8080
env:
- name: TZ
value: "Asia/Shanghai"
- name: LATNOTES_AUTH_TYPE
value: password
- name: FLATNOTES_USERNAME
value: admin
- name: FLATNOTES_PASSWORD
value: admin
- name: FLATNOTES_SECRET_KEY
value: Nl1rQmfg4gsnJfBfsmkXOo7G
- name: PORT
value: 8080
resources:
requests:
cpu: 0.1
memory: 0.1G
limits:
cpu: 1
memory: 0.5G
volumeMounts:
- name: data
mountPath:/data
# - name: config
# mountPath: /etc/config.json
---
apiVersion: v1
kind: Service
metadata:
name: my-flatnotes
namespace: flatnotes
spec:
ports:
- name: web
protocol: TCP
targetPort: 8080
port: 8080
nodePort: 30020
selector:
app: flatnotes
type: NodePort
Эта ошибка будет выдана, если в развертывании используется env и некоторые значения в env являются числами. Эта ошибка обычно возникает, когда в развертывании Kubernetes используются числовые переменные среды, а все переменные среды в Kubernetes должны иметь строковый тип.
Решение:
Добавьте кавычки или escape-символы в переменные среды, чтобы Kubernetes не интерпретировал их как числовые типы, например, меняя 123 на «123» или 123 на 123\.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: my-image
env:
- name: MY_VAR
value: "123"
Добавьте двойные кавычки к числу в части переменной env и преобразуйте его в строку.
########################## Aplication#####################################################
---
apiVersion: v1
kind: Namespace
metadata:
name: flatnotes
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: flatnotes
name: flatnotes
namespace: flatnotes
spec:
replicas: 2
selector:
matchLabels:
app: flatnotes
template:
metadata:
labels:
app: flatnotes
spec:
volumes:
- name: data
hostPath:
path: /data/flatnotes/data/
initContainers:
- name: volume-permissions
image: busybox:1.28
imagePullPolicy: IfNotPresent
command:
- sh
- -c
- chmod -R 777 /data/flatnotes/data/
volumeMounts:
- name: data
mountPath: /data/flatnotes/data/
containers:
- image: dullage/flatnotes:latest
name: my-flatnotes
ports:
- name: web
protocol: "TCP"
containerPort: 8080
env:
- name: TZ
value: "Asia/Shanghai"
- name: LATNOTES_AUTH_TYPE
value: password
- name: FLATNOTES_USERNAME
value: admin
- name: FLATNOTES_PASSWORD
value: admin
- name: FLATNOTES_SECRET_KEY
value: Nl1rQmfg4gsnJfBfsmkXOo7G
- name: PORT
value: "8080"
resources:
requests:
cpu: 0.1
memory: 0.1G
limits:
cpu: 1
memory: 0.5G
volumeMounts:
- name: data
mountPath: /data
# - name: config
# mountPath: /etc/config.json
---
apiVersion: v1
kind: Service
metadata:
name: my-flatnotes
namespace: flatnotes
spec:
ports:
- name: web
protocol: TCP
targetPort: 8080
port: 8080
nodePort: 30020
selector:
app: flatnotes
type: NodePort
При использовании правильного файла Flatnotes.yaml выполнение прошло успешно.
[root@k8s-master flatnotes]# kubectl apply -f flatnotes.yaml
namespace/flatnotes unchanged
deployment.apps/flatnotes created
service/my-flatnotes unchanged
Проверьте состояние каждого объекта ресурса в примечаниях. Все они находятся в нормальном состоянии, и проблема успешно решена.
[root@k8s-master flatnotes]# kubectl get pods -n flatnotes
NAME READY STATUS RESTARTS AGE
flatnotes-75947fb4bc-5wb8v 1/1 Running 0 2m34s
flatnotes-75947fb4bc-r5v6b 1/1 Running 0 2m34s
[root@k8s-master flatnotes]# kubectl get deployments.apps -n flatnotes -owide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
flatnotes 2/2 2 2 3m13s my-flatnotes dullage/flatnotes:latest app=flatnotes
[root@k8s-master flatnotes]# kubectl get service -n flatnotes
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-flatnotes NodePort 10.103.141.57 <none> 8080:30020/TCP 16m
Я участвую в третьем этапе специального тренировочного лагеря Tencent Technology Creation 2023 с эссе, получившими приз, и сформирую команду, которая разделит приз!