{"id":84,"date":"2019-02-16T09:47:55","date_gmt":"2019-02-16T07:47:55","guid":{"rendered":"https:\/\/jochem.jochemenbianca.nl\/?p=84"},"modified":"2019-04-23T21:02:31","modified_gmt":"2019-04-23T19:02:31","slug":"kubernetes-deel-2-de-nfs-share","status":"publish","type":"post","link":"https:\/\/jochem.jochemenbianca.nl\/?p=84","title":{"rendered":"Kubernetes deel 2 de nfs share"},"content":{"rendered":"<p>Na een aantal cursussen via LinuxAcademy te hebben gevolgd, waaronder docker, nu bezig met een cursus Kubernetes. Een van de lessen was het gebruik van een NFS storage voor de pods. Hiervoor heb je een PersistentVolume (pv), een PersistentVolumeClaim (pvc) en een NFS server nodig. Je begint met het installeren van een NFS server. en gebruikt daarin de volgende export<\/p>\n<p><code>\/var\/nfs\/general &lt;ips van de client_nodes&gt;(rw,sync,no_subtree_check)<\/code><\/p>\n<p>En ook op de nodes moet de nfs-common package geinstalleerd zijn.<br \/>\nVervolgens maken we een pv.yaml file aan met de volgende inhoud:<\/p>\n<pre><code>apiVersion: v1\r\nkind: PersistentVolume\r\nmetadata:\r\n  name: lapv\r\nspec:\r\n  capacity:\r\n    storage: 1Gi\r\n  volumeMode: Filesystem\r\n  accessModes:\r\n    - ReadWriteMany\r\n  persistentVolumeReclaimPolicy: Recycle\r\n  nfs:\r\n    path: \/var\/nfs\/general\r\n    server: $your-storage-server-private-IP\r\n    readOnly: false<\/code><\/pre>\n<p>Waarna we de PersistentVolume kunnen creeeren met<\/p>\n<p><code>kubectl create -f pv.yaml<code><\/code><\/code><\/p>\n<p>Hiermee maken we een connectie tussen de node en de NFS server<br \/>\nOm nu ook de storage kunnen gebruiken in de de andere pods moeten we een PersistentVolumeClaim (pvc) aanmaken. We maken dus een bestand aan genaamd pvc.yaml met de volgende inhoud:<\/p>\n<pre><code>apiVersion: v1\r\nkind: PersistentVolumeClaim\r\nmetadata:\r\n  name: nfs-pvc\r\nspec:\r\n  accessModes:\r\n  - ReadWriteMany\r\n  resources:\r\n    requests:\r\n      storage: 1Gi<\/code><\/pre>\n<p>We creeeren deze pvc met het volgende commando<\/p>\n<p><code>kubectl create -f pvc.yaml<\/code><\/p>\n<p>Nu kunnen de pods welke op nodes draaien welke we in de export file op de NFS server hebben benoemd gebruik maken van cd pvc genaamd nfs-pvc. We maken dus een yaml file voor pods, welke deze storage kunnen gebruiken. Deze nfs-pod.yaml file ziet er alsvolgt uit:<\/p>\n<pre><code>apiVersion: v1\r\nkind: Pod\r\nmetadata:\r\n  name: nfs-pod\r\n  labels:\r\n    name: nfs-pod\r\nspec:\r\n  containers:\r\n  - name: nfs-ctn\r\n    image: busybox\r\n    command:\r\n      - sleep\r\n      - \"3600\"\r\n    volumeMounts:\r\n    - name: nfsvol\r\n      mountPath: \/tmp\r\n  restartPolicy: Always\r\n  securityContext:\r\n    fsGroup: 65534\r\n    runAsUser: 65534\r\n  volumes:\r\n    - name: nfsvol\r\n      persistentVolumeClaim:\r\n        claimName: nfs-pvc<\/code><\/pre>\n<p>Deze yaml file maakt een pod aan met busybox en daain onze NFS share gemount onder \/tmp.<br \/>\nWe starten de pod op<\/p>\n<p><code>kubectl create -y nfs-pod.yaml<\/code><\/p>\n<p>en kunnen vervolgens inloggen op de pod met:<br \/>\n<code><br \/>\nkubectl exec -it nfs-pod --sh<\/code><\/p>\n<p>Ook kun je een deployment maken met een shared storage. Maak een nginx-nfs.yaml file aan met de volgende inhoud:<\/p>\n<pre><code>apiVersion: extensions\/v1beta1\r\nkind: Deployment\r\nmetadata:\r\n  name: nfs-nginx\r\nspec:\r\n  replicas: 1\r\n  selector:\r\n    matchLabels:\r\n      name: nfs-nginx\r\n  template:\r\n    metadata:\r\n      labels:\r\n        name: nfs-nginx\r\n    spec:\r\n      containers:\r\n      - image: nginx\r\n        imagePullPolicy: Always\r\n        name: nginx\r\n        ports:\r\n          - containerPort: 80\r\n            name: \"http-server\"\r\n        volumeMounts:\r\n          # name must match the volume name below\r\n          - name: nfsvol\r\n            mountPath: \"\/var\/nfs\"\r\n      volumes:\r\n      - name: nfsvol\r\n        persistentVolumeClaim:\r\n          claimName: nfs-pvc<\/code><\/pre>\n<p>Hiermee kunnen we dus een cluster maken met de nginx image welke een NFS shared storage gebruikt.<br \/>\nOm dit deployment te starten geven we het commando<\/p>\n<p><code>kubectl create -y nginx-nfs.yaml<\/code><\/p>\n<p>We kunnen nu eventueel opschalen met het commando:<\/p>\n<p><code>kubectl scale --replicas=4 deployment nfs-nginx<\/code><\/p>\n<p>Om vervolgens alle pods te kunnen benaderen via 1 ip adres kunnen we een nodepoort gebruiken. We kunnen dat doen door middel van het volgende commando:<\/p>\n<p><code>kubectl expose deployment nfs-nginx --name=nodeport --port=80 --target-port=80 --type=NodePort<\/code><\/p>\n<p>We kunnen het ip adres vinden door het volgende commando te geven<\/p>\n<p><code>kubectl get services<\/code><\/p>\n<p>We kunnen ons deployment bereiken via het ip adres achter nodeport<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Na een aantal cursussen via LinuxAcademy te hebben gevolgd, waaronder docker, nu bezig met een cursus Kubernetes. Een van de lessen was het gebruik van een NFS storage voor de pods. Hiervoor heb je een PersistentVolume (pv), een PersistentVolumeClaim (pvc) en een NFS server nodig. Je begint met het installeren [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3],"tags":[],"class_list":["post-84","post","type-post","status-publish","format-standard","hentry","category-kubernetes","category-open-source"],"_links":{"self":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts\/84","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=84"}],"version-history":[{"count":5,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts\/84\/revisions"}],"predecessor-version":[{"id":92,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=\/wp\/v2\/posts\/84\/revisions\/92"}],"wp:attachment":[{"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=84"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=84"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jochem.jochemenbianca.nl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=84"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}