Hello, Dear DevOps enthusiasts, In this post, we are going to explore the emptyDir Volume, which is going to work as local data share between containers in a Pod.
I had read the book titled 'Kubernetes in action', from that book I want to understand Persistance Volumes and Persistence Volume Claims in detail. will run the following example for PV that uses emptyDir volume type.
Every new learning is like a game! if you take each trouble as a game level it will be a wonderful game. Once you finish the desired state it's winning the game! why to wait let's jump on this game
Assumptions
- Docker installed
- Kubernetes Installed and configured Cluster
- AWS access to EC2 instances
We need to create a Tomcat container and Logstash container in the Kubernetes pod. In the below diagram, it will share the log file using Kubernetes volume that is empty dir.
The tomcat and Logstash cant use the network via localhost and it will share the filesystem.
Creating a YAML file :
apiVersion: apps/v1 kind: Deployment metadata: name: tomcat spec: replicas: 1 selector: matchLabels: run: tomcat template: metadata: labels: run: tomcat spec: containers: - image: tomcat name: tomcat ports: - containerPort: 8080 env: - name: UMASK value: "0022" volumeMounts: - mountPath: /usr/local/tomcat/logs name: tomcat-log - image: docker.elastic.co/logstash/logstash:7.4.2 name: logstash args: ["-e input { file { path => \"/mnt/localhost_access_log.*\" } } output { stdout { codec => rubydebug } elasticsearch { hosts => [\"http://elasticsearch-svc.default.svc.cluster.local:9200\"] } }"] volumeMounts: - mountPath: /mnt name: tomcat-log volumes: - name: tomcat-log emptyDir: {}
Output :
Now, creating the tomcat and logstash pods.
Syntax :
kubectl create -f tomcat-longstash.yaml
Output :
Now, checking the tomcat and logstash pods are ready.
Syntax :
kubectl get pods
Output :
Troubleshooting levels:
We have faced 2 levels of game-changers, when we tried to type the YAML file content it was a lot of indentations which matters a lot if you miss something it throughs error with hint as 'line numbers'. The most interesting thing when we define the two containers one after other, there is 'spec' should be handled properly.
In level 2 it is another adventurous journey, the Logstash image is no longer available in the docker hub. we have tweaked here and there to find what best repo gives this. With the googling reached to the elastic.co where ELK related images are published after replacing of Logstash image name. The second level of game over end entered into next level!
Finally, the last stage of the game, Connecting the logstash container and able to see the /mnt directory which contains logs that are generated from tomcat server. That concludes our experiment is successful.
Syntax :
kubectl exec -it tomcat-646d5446d4-l5tlv -c logstash -- /bin/bash
ls /mnt
Output :
Hence this will conclude that we can define the manifestation for the inter container sharing the storage.
Enjoy this fun-filled learning on Kubernetes! contact us for support and help on the Infrastructure build and delivery.
No comments:
Post a Comment