Als ich mit Kubernetes gearbeitet habe, habe ich den über den Browser verbundenen Container erstellt, weil ich mich gefragt habe, auf welchem Worker er ausgeführt wird. Ich benutze es, um den Arbeiter absichtlich anzuhalten und das Verbindungsziel zu überprüfen.
Es wurde auf https://hub.docker.com/r/yasthon/nginx-display-hostname hochgeladen.
Hier wird es in der Umgebung des Hostnamens "dockerhost.example.jp" ausgeführt.
$ docker pull yasthon/nginx-display-hostname
$ docker container run -d -v /etc/hostname:/usr/share/nginx/html/hostname -p 80:80 yasthon/nginx-display-hostname
$ curl http://localhost/index.sh
<html><head>
<title>dockerhost.example.jp</title>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
</head><body>
HOSTNAME : dockerhost.example.jp
</body></html>
Überprüfen Sie auch über den Browser.
//[Docker-Host-IP-Adresse]/index.Zugang sh.
HOSTNAME : dockerhost.example.jp
## Bewegung
Ich mounte `` `/ etc / hostname``` beim Starten des Containers.
Ich starte sh von Nginx und lese den Hostnamen.
Dockerfile
Diese Datei wird beim lokalen Erstellen verwendet.
#### **`Dockerfile`**
```dockerfile
FROM debian:buster-slim
COPY default.conf /etc/nginx/conf.d/
COPY index.sh /usr/share/nginx/html/
RUN apt-get update && \
apt-get install -y --no-install-recommends nginx fcgiwrap && \
apt-get autoclean && \
rm -rf /var/lib/apt/lists/* && \
echo "daemon off;" >> /etc/nginx/nginx.conf && \
rm -f /etc/nginx/sites-enabled/default && \
chmod 744 /usr/share/nginx/html/index.sh && \
chown www-data:www-data /usr/share/nginx/html/index.sh
CMD /etc/init.d/fcgiwrap start && nginx
Es funktionierte problemlos, wenn ich es normal auf dem Betriebssystem installierte, aber als ich es in einem Container ausführte, hatte ich ein Problem.
`Chmod
und
`` chown``` hinzugefügt.default.conf
Dies ist die Nginx-Konfigurationsdatei.
default.conf
server {
listen 80;
server_name localhost;
location ~ \.sh$ {
root /usr/share/nginx/html/;
include /etc/nginx/fastcgi_params;
fastcgi_index index.sh;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
}
Kein Problem im Vergleich zu Dockerfile.
index.sh
Liest die angehängte Hostnamendatei und zeigt sie an.
index.sh
#!/bin/sh
host_name=$(cat hostname)
echo "Content-type:text/html"
echo ""
echo "<html><head>"
echo "<title>${host_name}</title>"
echo '<meta http-equiv="Content-type" content="text/html;charset=UTF-8">'
echo "</head><body>"
echo "HOSTNAME : ${host_name}"
echo "</body></html>"
Ebenso ohne Probleme.
Der Bildname lautet "nginx-display-hostname". Legen Sie die drei Dateien in dasselbe Verzeichnis und führen Sie "Docker Build" aus.
$ docker image build -t nginx-display-hostname .
$ docker container run -d -v /etc/hostname:/usr/share/nginx/html/hostname -p 80:80 nginx-display-hostname
$ curl http://localhost/index.sh
<html><head>
<title>dockerhost.example.jp</title>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
</head><body>
HOSTNAME : dockerhost.example.jp
</body></html>
Überprüfen Sie auch über den Browser.
//[Docker-Host-IP-Adresse]/index.Zugang sh.
HOSTNAME : dockerhost.example.jp
## Arbeiten an Kubernetes
Sie müssen `` `/ etc / hostname``` mithilfe von volumeMounts und Volumes bereitstellen.
#### **`sample.yaml`**
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: nginx-prod #Namespace-Name
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment #Bereitstellungsname(Dies ist auch der Name des Replikatsatzes)
namespace: nginx-prod #Namespace-Name
spec:
selector:
matchLabels: #Erstellen eines Replikatsatzes für Pods mit übereinstimmenden Beschriftungen
app: nginx-pod
replicas: 2
template: #Pod-Vorlage
metadata:
name: nginx-pod #Pod Name
namespace: nginx-prod #Der Name des Namespace des Pods
labels: #Pod-Etikett
app: nginx-pod
spec:
containers: #Containereinstellungen
- name: nginx-container #Der Name des Containers
image: yasthon/nginx-display-hostname #Bildname
env:
- name: nginx-container
ports:
- containerPort: 80 #Containerhafen
volumeMounts:
- name: file-hostname
mountPath: /usr/share/nginx/html/hostname
volumes:
- name: file-hostname
hostPath:
path: /etc/hostname
Starten Sie den Pod.
$ kubectl apply -f sample.yaml
namespace/nginx-prod created
deployment.apps/nginx-deployment created
Überprüfen Sie den Namen des Pods.
$ kubectl get all -n nginx-prod
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-7ff4cc65cd-6r4qv 1/1 Running 0 3m52s
pod/nginx-deployment-7ff4cc65cd-djm9r 1/1 Running 0 3m52s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deployment 2/2 2 2 3m53s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-deployment-7ff4cc65cd 2 2 2 3m53s
Überprüfen Sie die IP in den Pod-Details.
$ kubectl describe pod/nginx-deployment-7ff4cc65cd-djm9r -n nginx-prod | grep ^IP:
IP: 10.244.1.5
Greifen Sie vom Worker auf die bestätigte IP zu.
$ curl http://10.244.1.5/index.sh
<html><head>
<title>worker.example.jp</title>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
</head><body>
HOSTNAME : worker.example.jp
</body></html>
Es wurde bestätigt, dass der Pod (nginx-deploy-7ff4cc65cd-6r4qv) auf dem Host worker.example.jp gestartet wurde. Für den Browserzugriff von außerhalb des Clusters ist ein Dienst erforderlich.
Ich dachte, ich könnte es bald schaffen, aber es dauerte unerwartet lange. Ich hoffe, es wird für diejenigen nützlich sein, die es brauchen.
Recommended Posts