๋์ ์์ฒญ์ ๋๊น? (์์ธ ๊ฒฝ์ฐ ๋ฌธ์ ํด๊ฒฐ ๊ฐ์ด๋ ๋ฐ ์ปค๋ฎค๋ํฐ ์ง์ ์ฑ๋์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. http://kubernetes.io/docs/troubleshooting/ ์ฐธ์กฐ): ์๋์
์ด ๋ฌธ์ ๋ฅผ ์ ์ถํ๊ธฐ ์ ์ Kubernetes ๋ฌธ์ ์์ ์ด๋ค ํค์๋๋ฅผ ๊ฒ์ํ์ต๋๊น? (์ค๋ณต์ ๋ฐ๊ฒฌํ๋ค๋ฉด ๋์ ๊ฑฐ๊ธฐ์ ํ์ ํด์ผ ํฉ๋๋ค.): command not found configmap kubernetes
์ด๊ฒ์ ๋ฒ๊ทธ ๋ณด๊ณ ์์ ๋๊น ์๋๋ฉด ๊ธฐ๋ฅ ์์ฒญ์ ๋๊น? (ํ๋ ์ ํ): ๋ฒ๊ทธ
Kubernetes ๋ฒ์ ( kubectl version
):
ํด๋ผ์ด์ธํธ ๋ฒ์ : v1.6.1 GitCommit:"b0b7a323cc5a4a2019b2e9520c21c7830b7f708e"
์๋ฒ ๋ฒ์ : v1.6.0 GitCommit:"fff5156092b56e6bd60fff75aad4dc9de6b6ef37
ํ๊ฒฝ :
uname -a
): ํธ์คํธ๋ Linux dev1 4.4.0-72-generic #93-Ubuntu SMP Fri Mar 31 14:07:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux๋ฌด์จ ์ผ์ด ์์๋์ง :
์ง์
์ ๊ณผ ๋์ผํ ๋๋ ํ ๋ฆฌ์ ๋ง์ดํธ๋ configmap ํ์ผ์ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ๋ฅผ ์์ฑํ๋ ค๊ณ ํ๋ฉด ๋ค์ ์ค๋ฅ์ ํจ๊ป ์ปจํ
์ด๋๊ฐ ์์๋์ง ์์ต๋๋ค.
"๋ฐ๋ชฌ์ ์ค๋ฅ ์๋ต: ์ปจํ
์ด๋ ๋ช
๋ น '/app/app.sh'๋ฅผ ์ฐพ์ ์ ์๊ฑฐ๋ ์กด์ฌํ์ง ์์ต๋๋ค."
ํฌ๋ ์ฌ์์๋ ์ง์
์ ๊ณผ ๋์ผํ ๋๋ ํ ๋ฆฌ์ ๋ง์ดํธ๋๋ configmap์ด ํฌํจ๋ฉ๋๋ค.
๋์ผํ ๋๋ ํ ๋ฆฌ์ ๊ตฌ์ฑ ๋งต์ ๋ํ ๋ณผ๋ฅจ์ ๋ง์ดํธํ ํ ์ง์
์ ์คํฌ๋ฆฝํธ๊ฐ ์์ค๋ ๊ฒ ๊ฐ์ต๋๋ค.
configmap ํ์ผ์ ํ์ ๋๋ ํ ๋ฆฌ์ ๋ง์ดํธํ๋ฉด ๋ชจ๋ ์์๋๋ก ์๋ํฉ๋๋ค.
์์ํ๋ ์ผ :
์ด ๊ฒฝ์ฐ ์ง์
์ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋ ๊ธฐ์กด ๋๋ ํฐ๋ฆฌ ์ฝํ
์ธ ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ๋๋ ํฐ๋ฆฌ์ ๊ตฌ์ฑ ๋งต ํ์ผ์ด ์์ฑ๋ ๊ฒ์ผ๋ก ์์ํ์ต๋๋ค.
๊ทธ๊ฒ์ ์ฌํํ๋ ๋ฐฉ๋ฒ (๊ฐ๋ฅํ ํ ์ต์ํ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ์ ํํ๊ฒ):
Docker ํ์ผ - ์ง์ ์ ์ฐธ๊ณ
FROM busybox:latest
RUN mkdir /app
COPY app.sh /app
ENTRYPOINT ["/app/app.sh"]
์ง์ ์ ์คํฌ๋ฆฝํธ - ๋ฌดํ ๋ฃจํ
#!/bin/sh
seq=1
while [[ true ]]; do
echo "${seq} $(date) working"
sleep .5s
let seq=$((seq + 1))
done
k8s configmap ๋ฐ ๋ฐฐํฌ ํ์ผ
apiVersion: v1
kind: ConfigMap
metadata:
labels:
product: k8s-demo
name: demo
data:
settings.json: |
{
"store": {
"type": "InMemory",
}
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
labels:
product: k8s-demo
name: demo
spec:
replicas: 1
template:
metadata:
labels:
app: demo
product: k8s-demo
spec:
containers:
- name: demo
image: pmcgrath/shellloop:1
imagePullPolicy: Always
volumeMounts:
- name: demo-config
mountPath: /app
volumes:
- name: demo-config
configMap:
name: demo
items:
- key: settings.json
path: settings.json
kubectl apply -d k8s.yaml์ ์คํํ๊ณ ํฌ๋๋ฅผ ๋ณด๋ฉด ๋ค์ ์ค๋ฅ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
rpc ์ค๋ฅ: ์ฝ๋ = 2 desc = "f9e0112c80ebba568d4b508f99ffb053bf1ae5a4f095ce7f45bff5f38900b617" ์ปจํ ์ด๋ ์์ ์คํจ: ๋ฐ๋ชฌ์ ์ค๋ฅ ์๋ต: ์ปจํ ์ด๋ ๋ช ๋ น์ด './app/app.sh๊ฐ ์๊ฑฐ๋ ์กด์ฌํ์ง ์์ต๋๋ค'
๊ธฐํ ์์์ผ ํ ์ฌํญ:
๋ณผ๋ฅจ์ mountPath๋ฅผ ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ๋ก ๋ณ๊ฒฝํ๋ฉด ์์๋๋ก ์๋ํฉ๋๋ค.
๋ด ํธ์คํธ(17.03.0-ce)์์ docker๋ก ์ง์ ํ ์คํธํ์ผ๋ฉฐ ์์๋๋ก ์๋ํ์ต๋๋ค.
touch settings.json
docker container run -ti -v $(pwd)/settings.json:/app/settings.json pmcgrath/shellloop:1
@pmcgrath
์ฌ๊ธฐ์์ ํ์ธํ์ธ์ .
๊ทํ์ ๋ฌธ์ ๋ฅผ ์ดํดํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ ์๋ ๊ฐ์ ์ง๋ฌธ์ด ์์ง๋ง ์ค์ ๋ก ๊ทํ์ ์ํฉ์ ๋ต์ด ์์ต๋๋ค.
๊ทํ์ ์ฌ๋ก๋ฅผ ๊ฐ๋ตํ๊ฒ ์ค๋ช
ํ๊ธฐ ์ํด configmap( settings.json: blahblah
)์ด ์๊ณ /app
ํด๋์ ๋ง์ดํธํ๋ ค๊ณ ํฉ๋๋ค. ๋ค์์ ์์์ผ ํ ์ฌํญ์
๋๋ค.
mountPath
์ฌ์ ์ํ๋ฏ๋ก ๊ทํ์ ๊ฒฝ์ฐ /app
ํด๋์๋ settings.json
๋ง ํฌํจ๋ฉ๋๋ค.mountPath: /app/settings.json
๋ฅผ ์ง์ ํด์ผ /app
ํด๋์ ์๋ณธ ์ฝํ
์ธ ๊ฐ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.์ด๊ฒ์ ๊ฒฐ๊ตญ ์ป์ ์ ์๋ ๊ฒ์ ๋๋ค.
containers:
- volumeMounts:
- name: demo-config
mountPath: /app/settings.json
subPath: settings.json
volumes:
- name: demo-config
configMap:
name: demo
@zhouhaibing089
๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค. ์ ์์ ๋ฐ๋ผ ์๋ํฉ๋๋ค. ์ค๋ช
์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ข
๋ฃํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
๊ฐ๋ณ๊ฒ ๋๋๋ฆฌ๊ธฐ
์ฐธ๊ณ ๋ก ์ด ์๋ฃจ์ ์ ๋ํ ์๋ ์ธ๊ธ์ https://github.com/kubernetes/kubernetes/issues/23748#issuecomment -230390309์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ด์ ๋ํ ๋ฌธ์๊ฐ ๋๋ฝ๋์ด ์ด ๊ฒฝ์ฐ๊ฐ ์๋นํ ํผ๋์ค๋ฝ๊ฑฐ๋ ์คํด์ ์์ง๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ, ํฌ์ ๋ฌธ์๋ ๋ ์คํด์ ์์ง๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ์๋ ์ ๋ฐ์ดํธ๊ฐ ํด๋น ๋ฌธ์ ์ ๋ฐ๋ผ ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ฝ๋์๋์ง ํ์คํ์ง ์์ต๋๋ค.
mountPath
๋ฐ subPath
๋ ๋ค์์ ํ์ผ ์ด๋ฆ์ ์ง์ ํด์ผ ํ๋ค๋ ์๊ตฌ ์ฌํญ์ ์ง๊ด์ ์ด์ง ์์ต๋๋ค.
@zhouhaibing089์์ ์ ๊ณตํ๋ ์๋ฃจ์
์ ์๋ํ์ง๋ง ์ ์ฌํ ConfigMap์์ ํธ์งํ๋ฉด subPath
๋ง์ดํธ๋ ํ์ผ์ ๋ด์ฉ์ด ์
๋ฐ์ดํธ๋์ง ์์ต๋๋ค.
IMO, ์ด๊ฒ์ _์ค์ ๋ก_ ํด๊ฒฐ๋์ง ์์์ต๋๋ค. ๋ฎ์ด์ฐ์ง ์๊ณ ๊ฐ ํค๋ฅผ ์ถ๊ฐํ๋ ์ต์ ์ด ์์ด์ผ ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๊ฒ:
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-conf
data:
example1.conf: |
server {
server_name example1.com;
# config here...
}
example2.conf: |
server {
server_name example2.com;
# config here...
}
ํ๋๋กํ๋ค...
- name: nginx-conf
mountPath: /etc/nginx/conf.d
append: true
... ๊ธฐ์กด default.conf
๋ฐ Docker ์ด๋ฏธ์ง์ ๊ธฐํ ์ธ๊ณต๋ฌผ์ ์ ์งํ์ง๋ง example*.conf
subPath์์ ๋์ผํ ์ ๋ณด๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ _icky_์ ๋๋ค.
@leebenson ์ append: true
์ต์
์ +1.
@leebenson ๋ต๋ณ์ ๋ฐ๋ฅด๋ฉด append: true
์ต์
์ด ์ด๋์์ ์ค๋์ง ์ค๋ช
ํ ์ ์์ต๋๊น ??
๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ์๋ํ์ง ์์ต๋๋ค, ๋๋ ์ป์๋ค:
error: error validating "hdfs/21-namenode-statefulset.yaml": error validating data: ValidationError(StatefulSet.spec.template.spec.containers[1].volumeMounts[1]): unknown field "append" in io.k8s.api.core.v1.VolumeMount; if you choose to ignore these errors, turn validation off with --validate=false
๋ํ ๋ณผ๋ฅจ ๋ง์ดํธ์ ๋ํ API ๋ฌธ์์๋ ์์ต๋๋ค.
https://k8smeetup.github.io/docs/api-reference/v1.9/#volumemount -v1-core
@leebenson ๋ต๋ณ์ ๋ฐ๋ฅด๋ฉด
append: true
์ต์ ์ด ์ด๋์์ ์ค๋์ง ์ค๋ช ํ ์ ์์ต๋๊น ??๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ์๋ํ์ง ์์ต๋๋ค, ๋๋ ์ป์๋ค:
error: error validating "hdfs/21-namenode-statefulset.yaml": error validating data: ValidationError(StatefulSet.spec.template.spec.containers[1].volumeMounts[1]): unknown field "append" in io.k8s.api.core.v1.VolumeMount; if you choose to ignore these errors, turn validation off with --validate=false
๋ํ ๋ณผ๋ฅจ ๋ง์ดํธ์ ๋ํ API ๋ฌธ์์๋ ์์ต๋๋ค.
https://k8smeetup.github.io/docs/api-reference/v1.9/#volumemount -v1-core
๊ทธ๊ฒ์ ์กด์ฌํ์ง ์์ต๋๋ค, ๊ทธ๊ฒ์ ์ ์์ ๋๋ค. ์ ์ค ์ผ์ด์ค์ ์ข์ ๊ฒ.
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ค๊ณ ํ์ง๋ง statefulset์ ์ ์ฉํ ๋ ์ฝ๊ธฐ ์ ์ฉ ํ์ผ ์์คํ
์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์๋ฌด๋ ๊ทธ๊ฒ์ ๊ณ ์น ๋ฐฉ๋ฒ์ ์๊ณ ์์ต๋๊น?
(elasticsearch์ ๋ํ ์ค์ ์ด ํฌํจ๋ ๊ธฐ์กด ํ์ผ์ ๋ฎ์ด์๋๋ค. ์ค์ ์ค๋ฅ ๋ฉ์์ง --> /usr/share/elasticsearch/bin/run.sh: line 28: ./config/elasticsearch.yml: Read-only file system
)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@pmcgrath
์ฌ๊ธฐ์์ ํ์ธํ์ธ์ .
๊ทํ์ ๋ฌธ์ ๋ฅผ ์ดํดํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ ์๋ ๊ฐ์ ์ง๋ฌธ์ด ์์ง๋ง ์ค์ ๋ก ๊ทํ์ ์ํฉ์ ๋ต์ด ์์ต๋๋ค.
๊ทํ์ ์ฌ๋ก๋ฅผ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ๊ธฐ ์ํด configmap(
settings.json: blahblah
)์ด ์๊ณ/app
ํด๋์ ๋ง์ดํธํ๋ ค๊ณ ํฉ๋๋ค. ๋ค์์ ์์์ผ ํ ์ฌํญ์ ๋๋ค.mountPath
์ฌ์ ์ํ๋ฏ๋ก ๊ทํ์ ๊ฒฝ์ฐ/app
ํด๋์๋settings.json
๋ง ํฌํจ๋ฉ๋๋ค.mountPath: /app/settings.json
๋ฅผ ์ง์ ํด์ผ/app
ํด๋์ ์๋ณธ ์ฝํ ์ธ ๊ฐ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.์ด๊ฒ์ ๊ฒฐ๊ตญ ์ป์ ์ ์๋ ๊ฒ์ ๋๋ค.