Site blog

Sida: 1 2 ()
Bild av Mats Johannesson
av Mats Johannesson - Tuesday, 5 October 2021, 23:51
Vem som helst (även för gäster)



The goal for this information and my book, is to get you up and running Kubernetes. The recommended way, is to read the information in this order:

1.     Overview (this blog entry): to get overview about control plane.

2.     Pod(Pods): to get information about pod (to be posted).

3.     kubectl: the CLI tool to handle the cluster (to be posted).

4.     Service: to get information about service and how to work with these (to be posted).

5.     Namespaces: to get information about namespaces and how to work with namespaces to isolate resources on the cluster (to be posted).

6.     Helm: to get information about Helm (to be posted).

7.     Managed Services (Cloud): to get information about managed services for Kubernetes in the Cloud (Azure, GCP and aws) (to be posted).

 

Overview

Kubernetes is a portable, extensible, open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available.

The name Kubernetes originates from Greek, meaning helmsman or pilot. K8s as an abbreviation result from counting the eight letters between the "K" and the "s". Google open-sourced the Kubernetes project in 2014. Kubernetes combines over 15 years of Google's experience running production workloads at scale with best-of-breed ideas and practices from the community.


Components

When you deploy Kubernetes, you get a cluster.

A Kubernetes cluster consists of a set of worker machines, called nodes, that run containerized applications. Every cluster has at least one worker node.

Topologi

The worker node(s) host the Pods that are the components of the application workload. The control plane manages the worker nodes and the Pods in the cluster. In production environments, the control plane usually runs across multiple computers and a cluster usually runs multiple nodes, providing fault-tolerance and high availability.

The control plane's components make global decisions about the cluster (for example, scheduling), as well as detecting and responding to cluster events (for example, starting up a new pod when a deployment's replicas field is unsatisfied). Kubernetes use Desired State Configuration, it compares desired configuration against the running configuration, and make changes when the desired configuration is not satisfied.

Control plane components can be run on any machine in the cluster. However, for simplicity, set up scripts typically start all control plane components on the same machine, and do not run user containers on these machines. Components for control plane are: API server, etcd, scheduler, and controller-manager.


API server

The API server is a component of the Kubernetes control plane that exposes the Kubernetes API. The API server is the front end for the Kubernetes control plane. 

The main implementation of a Kubernetes API server is API server. API server is designed to scale horizontally—that is, it scales by deploying more instances. You can run several instances of API server and balance traffic between those instances.


etcd

 Consistent and highly available key value store used as Kubernetes' backing store for all cluster data. etcd is used as a Single Source of Truth (SSOT). In production it´s vital to provide fault-tolerance and high availability for etcd. At least, use three (3) machines for etcd.


Scheduler

Control plane component that watches for newly created Pods with no assigned node and selects a node for them to run on. It attempts to reach the desired state as per etcd values from current state.

Scheduler

Factors considered for scheduling decisions include individual and collective resource requirements, hardware/software/policy constraints, affinity and anti-affinity specifications, data locality, inter-workload interference, and deadlines.

Scheduling starts with finding suitable nodes that have resources that can host a pod. For example, if a pod has specific sets of requirements in terms of CPU and Memory passed in the request, then only those nodes will be selected that have these requirements. This is handled by a set of predicates which execute in chain filtering nodes for each given parameter, like ports, hostname, resources, node pressure in terms of processes and CPU usage.

As nodes get evaluated against the parameters, each node gets a ranking showing their suitability, with the highest-ranking node finally getting selected. Once node is selected a binding object is created which has namespace, pod name and uid with reference to the node selected. This binding object then ends up getting sent to API Server via a POST. Once the API Server receives this request it updates the etcd entry for the pod object with the given node name and changes the PodScheduled to true. Once this update is done, it’s time to get the pod running on a worker node.

At this point the object exists in etcd with no actual physical resources assigned. Next the object will be sent over to the set of nodes referenced to the object in etcd. This is done by a pull mechanism executed by kublet.

 

Limits and request

A pod in Kubernetes can freely consume resources, such as CPU and memory, from the underlying system. But that doesn't mean it should.

IT teams define limits that restrict pods from using all the resources of the system. That way, there isn't any unfair distribution of resources across applications running on the pods.

To understand these configurable constraints, first let's examine requests and limits in Kubernetes. Both are applied at the pod level. The Kubernetes scheduler uses this information to determine where to place a pod.

  • request is the minimum resources a container needs on a node to function properly. If there aren't nodes with sufficient resources to meet these requests, the pod won't be created.
  • limit sets the maximum amount of a resource that a container can use. If a container consumes more than its limit, then it's either throttled down (in the case of CPU) or the container is terminated (in the case of memory). Limits ensure containers don't consume more resource than they're assigned, which leads to resource exhaustion


Choosing practical requests and limits

Setting requests and limits correctly is critical to the Kubernetes cluster. But setting pragmatic Kubernetes requests and limits is not a straightforward task. It can also be unpredictable.

Use trial and error to determine the appropriate limitations. There can't be a one-size-fits-all or optimal value for all containers. Resource consumption depends on the application and varies on a case-by-case basis.

Ideally, maintain a 20% to 30% margin during request setup so that, even if slightly more resources are required than allocated, it can be managed easily. But don't overcommit resources, as it can result in performance bottlenecks on the node.


Setting requests and limits

Setting up Kubernetes requests and limits on pods is as simple as applying the pod configuration file below, with requests and limits set for CPUs in "millicpu" and for memory in "MiB."

Request limits

To apply these settings, use following command:

kubectl apply -f <name_for_yaml file> --namespace=<name_for_namespace>

For more information about namespace, see the section Namespaces.


Deault requests and limits

Developers should set their own resource requests and limits. But sometimes they either over-provision resources for containers out of an abundance of caution or forget to set requests and limits altogether. Therefore, Kubernetes cluster administrators should enforce requests and limits on a Kubernetes namespace level. This ensures that, as soon as a container is created in the namespace, resource bounds are applied to them automatically.

There are two ways to control resource consumption on a Kubernetes namespace: Resource Quotas and Limit Ranges. For more information about namespace, see the post for Namespaces.


Resource Quotas

A ResourceQuota limits the total resource consumption of a namespace. For example, in the following YAML configuration, the namespace has a hard limit of 10 CPUs, 20 Gi of memory and 10 pods.

Resource quota

Limit Ranges

LimitRange objects manage constraints at a pod/container level, and the configurations are applied on individual containers, rather than across all resources in a namespace. If a container doesn't specify its own container limit, then a "LimitRange" object will apply default requests and limits, which are restricted by the ResourceQuota at the namespace level.

LimitRange objects are defined as shown in the following example YAML configuration, where "max" and "min" sections cover the maximum and minimum limits of resources. The "default" section configures containers with these default limits, if not explicitly specified otherwise. Finally, the "defaultRequest" section controls the assignment of default request values for the container, if not defined already.

Limit range


Controller-manager

Controller-manager is a Control Plane component that runs controller processes.

Logically, each controller is a separate process, but to reduce complexity, they are all compiled into a single binary and run in a single process.

Some types of these controllers are:

  • Node controller: Responsible for noticing and responding when nodes go down.
  • Job controller: Watches for Job objects that represent one-off tasks, then creates Pods to run those tasks to completion.
  • Endpoint’s controller: Populates the Endpoints object (that is, joins Services & Pods).
  • Service Account & Token controllers: Create default accounts and API access tokens for new namespaces.

Node Components

Node components run on every node, maintaining running pods and providing the Kubernetes runtime environment.


kubelet

An agent that runs on each node in the cluster. It makes sure that containers are running in a Pod.

The kubelet takes a set of PodSpecs that are provided through various mechanisms and ensures that the containers described in those PodSpecs are running and healthy. The kubelet doesn't manage containers which were not created by Kubernetes.

Example:

Podspec

kublet polls API Server for pods bound to the node it is running on by default every 20 seconds. If it detects a change compared to its own state, it begins to synchronize to the new state.

It works through following steps:

1.     If it’s a new pod, register it and publish startup metrics.

2.     Generate a pod status object with possible values like Pending, Running, Succeeded, Failed and Unknown, as these represent the states a pod can be in. It is determined by running pod specs to through a chain of PodSyncHandlers. Each handler checks if pod should run on the node or not. If any one of these fails, the pod will transition to evicted state.

3.     Upon generation of Pod status, it will be sent to etcd for updating. Pod is then running through a set of node level admission handlers like AppArmor profiles and privilege evaluations.

4.     If pod has specific cgroup requirements, these will be enforced and attached to the pod.

5.     Data directories are then created for pod data, volumes, and related plugins.

6.     Any volumes required will be created and attached.

7.     Secrets, if needed, are pulled from API server, and made available for injection into the pod.

8.     Image-related info such as secrets and url is gathered and made available for the container runtime to execute.

9.     Finally, all this info is passed to container runtime to actually run the container.

Container runtime

The time has now come to make our container live by making it run on the physical resources. This is achieved by invoking CRI (Container Runtime Interface), which is an interface layer between Kubernetes and container runtimes, such as docker, containerd, rkt and more.


kube-proxy

kube-proxy is a network proxy that runs on each node in your cluster, implementing part of the Kubernetes Service concept. kube-proxy maintains network rules on nodes. These network rules allow network communication to your Pods from network sessions inside or outside of your cluster. kube-proxy uses the operating system packet filtering layer if there is one and it's available. Otherwise, kube-proxy forwards the traffic itself.


Container runtime

The container runtime is the software that is responsible for running containers.

Kubernetes supports several container runtimes: Docker, containerd, CRI-O, and any implementation of the Kubernetes CRI (Container Runtime Interface).


Overview how everything is connected in Kubernetes

Overview


The above pictures are just for an overview, it´s show how everything is connected in Kubernetes.




 


etiketter:
[ Modifierad: Wednesday, 6 October 2021, 08:17 ]
 
Vem som helst (även för gäster)

Omslag


Förutsättning: Konto för GCP.

 

Arbetsuppgift 1: Anslut till konsol för GCP och logga på

1. Öppna webbläsare och skriv in URL: https://console.cloud.google.com och klicka på Enter.

2.  Logga på med dina inloggningsuppgifter.

 

Arbetsuppgift 2: Skapa projekt och verifiera att API är påslaget

1. I konsol, expandera Navigation menu på vänstra sidan och klicka på IAM & Admin – Settings.

Ändra projektnamn


2. I fältet under Project name, skriv in nytt namn för ditt projekt, klicka sedan på SAVE.

3. Återinläs sidan och namnet kommer att förändras.

4. I konsol, expandera Navigation menu på vänstra sidan och klicka på APIs & Services - Dashboard.

Söka efter Kubernetes Engine API


5. Skriv in Kubernetes Engine API i sökrutan och klicka på Enter. Klicka på Kubernetes Engine API i sökresultatet.

Klicka på ENABLE.


6. Klicka på ENABLE (Om API redan är påslaget, kommer det att stå DISABLE). Detta kommer att ta några minuter.


Översikt Kubernetes Engine API


7. När API är påslaget kommer översiktsbild att visas.


Söka efter Google Container Registry


8. Skriv in Google Container Registry API i sökrutan och klicka på Enter. Klicka på Google Container Registry API i sökresultatet.

Verifiera att Google Container Registry är påslaget

9. Verifiera att det står Enabled under Activation status.


Arbetsuppgift 3: Skapa kluster

Aktiver Cloud Shell

1. I den högra övre delen av konsol, klicka på ikon >_ (Activate Cloud Shell).

Cloud Shell Continue

2. I nedre delen av konsol, klicka på Continue. Virtuell maskin med Cloud Shell kommer att skapas och startas.

Öppna Cloud Shell i nytt fönster

3. Istället för att arbeta i den nedre delen av konsolen, klicka på ikon för Open in new window, för att öppna ett nytt fönster med Cloud Shell.

Skapa variabel med information om zon

4. Skriv in följande kommando och klicka på Enter, för att skapa variabel som innehåller namnet för den zon där du kommer att skapa klustret:

 export MIN_ZON=europe-north1-a

För att se vilka zoner som finns tillgängliga, använd följande kommando: 

gcloud compute zones list


Skapa kluster

5. Skriv in följande kommando och klicka på Enter, för att skapa kluster för webbfrontend med två (2) noder:

 gcloud container clusters create webbfronten --zone $MIN_ZON --num-nodes 2


Status när klustret har skapats

6. Efter en stund kommer klustret vara klart, verifiera att STATUS visar RUNNING.

kubectl get version

7. Skriv in följande kommando och klicka på Enter, för att kontrollera version:

kubectl version

Noder är VM

8. Återgå till konsol, expandera Navigation menu på vänstra sidan och klicka på Compute Engine, verifiera att noder som du skapade är virtuella maskiner och att dessa finns i den zon som du specificerade.

Kubernetes cluster

9. Du kan även se klustret genom att expandera Navigation menu på vänstra sidan och klicka på Kubernetes clusters, verifiera att klustret som du skapade tidigare visas.

 

Arbetsuppgift 4: Skapa deplyment för nginx

1. Återgå till fönstret för Cloud Shell.

kubectl create deployment nginx --image:nginx:latest

2. Skriv in följande kommando och klicka på Enter, för att skapa deployment för nginx:

kubectl create deployment nginx --image=nginx:latest

kubectl get pods

2. Deployment består av en pod, för att verifiera detta skriv in följande kommando och klicka på Enter:

kubectl get pods

 

Arbetsuppgift 5: Exponera pod för åtkomst från Internet (LoadBalancer)

kubectl expose deployment nginx

1. I fönstret för Cloud Shell, skriv in följande kommando och klicka på Enter:

kubectl expose deployment nginx --port 80 --type LoadBalancer

LoadBalancer exponeras som en tjänst (services). I .easec:s modul Kubernetes beskrivs de olika kopplingarna som kan göras, bland annat med NodePort.

kubectl get services

2. I fönstret för Cloud Shell, skriv in följande kommando och klicka på Enter, för att se information om extern IP-adress (Kan ta en liten stund!):

kubectl get services

Notera extern IP-adress.

Webbläsare

3. Öppna ny flik i din webbläsare, skriv in extern IP-adress och klicka på Enter. Standardsida för nginx visas.

kubectl scale deployment

4. I fönstret för Cloud Shell, skriv in följande kommando och klicka på Enter, för att skala din deployment:

 kubectl scale deployment nginx --replicas 4

kubectl get pods

5. I fönstret för Cloud Shell, skriv in följande kommando och klicka på Enter, för att se pods:

kubectl get pods


kubectl get pods

6. I fönstret för Cloud Shell, skriv in följande kommando och klicka på Enter, för att se på vilka noder som pods körs på:

 kubectl get pods -o wide

Två pods körs på respektive nod. Lägg märke till att respektive pod har en unik IP-adress.

I verklig miljö så kan du styra hur dessa pods kommer att fördelas. I .easec:s modul Kubernetes tittar vi på detta. Det kommer att komma ett blogginlägg om detta. I Kubernetes är det Scheduler som hanterar detta.

Scheduler

Bilden ovan visar två typer av undersökningar som kan göras (det finns fler), tillgång av resurser och etikett (label).

Kubernetes Engine - Service & Ingress

7. Återgå till konsol, expandera Navigation menu på vänstra sidan och klicka på Kubernetes Engine – Services & Ingress, notera att tjänsten visas i konsol.

Service overview

8. Dubbelklicka på din tjänst, i fliken Overview får du en översiktsbild för din tjänst.

YAML

9. Klicka på fliken YAML för att se konfigurationsfil för din funktion.

 

Arbetsuppgift 6: Städa upp
kubectl delete deployment nginx

1. I fönstret för Cloud Shell, skriv in följande kommando och klicka på Enter:

kubectl delete deployment nginx

kubectl get pods

2. I fönstret för Cloud Shell, skriv in följande kommando och klicka på Enter, för att verifiera att pods är borttagna:

 kubectl get pods

Kommandot resulterar i att inga pods finns.

kubectl delete service nginx

3.cI fönstret för Cloud Shell, skriv in följande kommando och klicka på Enter, för att ta bort tjänst (nginx):

 kubectl delete service nginx

kubectl get services

4. I fönstret för Cloud Shell, skriv in följande kommando och klicka på Enter, för att kontrollera att tjänst är borta:

 kubectl get services

gcloud container clusters delete

5. I fönstret för Cloud Shell, skriv in följande kommando och klicka på Enter, för att ta bort klustret:

 gcloud container clusters delete webbfronten --zone $MIN_ZON

Skriv in ett Y och klicka på Enter för att bekräfta att du vill ta bort.


Verifiera att VM är borta

6. Återgå till konsol, expandera Navigation menu på vänstra sidan och klicka på Compute Engine, verifiera att noder som skapades tidigare är borta.

 

Du är klar!













[ Modifierad: Saturday, 16 May 2020, 00:23 ]
 
Bild av Mats Johannesson
av Mats Johannesson - Tuesday, 5 May 2020, 13:53
Vem som helst (även för gäster)

Lomma hamn


Den 18-19 maj kör Edument AB .easec:s kurs Orkestrering i Docker online!


Läs mer här: https://www.edument.se/product/orkestrering-i-docker

 
Vem som helst (även för gäster)

sudo kubectl --kubeconfig


Installera worker

Miljö

Rollen worker för Kubernetes kommer att installeras på easec-linux4, easec-linux5 och easec-linux6.

I .easec:s miljö är Docker redan installerat, i din miljö får du installera Docker och konfigurera Docker. För att konfigurera Docker för systemd och overlay2, se mitt blogginlägg: https://portal.easec.se/moodle/blog/index.php?entryid=43

 

Arbetsuppgift 1: Installera kubeadm, kubelet och kubectl

1. Anslut till Easec-Linux8 och logga på som easec med lösenordet Pa$$w0rd.

2. På Easec-Linux8 öppna terminalfönstret (ctrl+alt+t) och skriv in följande kommando och klicka på Enter, för att ansluta till easec-linux1:

                    ssh easec-linux4

Om det är första gången du ansluter till easec-linux4, skriv in yes och klicka på Enter. Ange Pa$$w0rd som lösenord.

curl -s

3. För att lägga till signeringsnyckel för Kubernetes, skriv in följande kommando och klicka på Enter:

                    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

Ange Pa$$w0rd som lösenord för sudo.

sudo apt-add-repository

4. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att lägga till referens till förråd:

                    sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

5. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att lägga uppdatera referenser:

                    sudo apt-get update

sudo apt-get install

6. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att installera kubeadm kubelet och kubectl:

                    sudo apt-get install -y kubeadm kubelet kubectl

7. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att säkerställa att kubeadm, kubelet och kubectl inte uppdateras:

                    sudo apt-mark hold kubeadm kubelet kubectl

8. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att stänga av swap och göra detta permanent:

                    sudo swapoff -a && sudo sed -i '/ swap / s/^/#/' /etc/fstab

9. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att avsluta anslutning till easec-linux4:

                    exit

5.     Gör om punkt 2 – 9 för easec-linux5 respektive easec-linux6.

 

Arbetsuppgift 2: Initiera noder

scp ~/anslutning.txt

1. På Easec-Linux8, i terminalfönstret, skriv in följande kommando och klicka på Enter, för att kopiera filen anslutning.txt till easec-linux4, easec-linux5 och easec-linux6:

                    scp ~/anslutning.txt easec@192.168.1.24:~ && scp ~/anslutning.txt easec@192.168.1.25:~ && scp ~/anslutning.txt                          easec@192.168.1.26:~  

 Är det första gången du ansluter, får du skriva in yes och klicka på Enter. Ange Pa$$w0rd som lösenord.

2. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att ansluta till easec-linux4:

                    ssh easec-linux4

 Ange Pa$$w0rd som lösenord.

3. I terminalfönstret, skriv in följande kommando och klicka på Enter:

                    nano anslutning.txt

Kopiera anslutningskommando

4. Markera nedre raderna som börjar med sudo kubeadm join (under raden "Then you can join any number of worker nodes … ", högerklicka och välj Kopiera. Klicka på ctrl+x för att avsluta nano.

5. Högerklicka först i terminalfönstret och välj klistra in.

sudo kubeadm join

6. Klicka på Enter, ange Pa$$w0rd som lösenord för sudo.

7. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att avsluta anslutningen till easec-linux4:

                     exit

8. Gör om punkt 2 – 7 för easec-linux5 respektive easec-linux6.


Arbetsuppgift 3: Verifiera noder

1. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att ansluta till easec-linux1 (masternod):

                     ssh easec-linux1

 Ange Pa$$w0rd som lösenord.

sudo kubelet --kubconfig

2. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att verifiera att du har sex noder, av dessa är tre master:

                     sudo kubectl --kubeconfig /etc/kubernetes/admin.conf get nodes

 Ange Pa$$w0rd som lösenord för sudo.


I .easec:s tvådagars workshop fortsätter vi konfigurationen med:

- Installation av overlay network.

- Installation av klient på easec-linux8.

- Installation av dashboard.

- Installation av registry.

Andra dagen sätter du upp det andra alternativet med extern klustrad etcd.

Två tilläggsdagar erbjuds:

- Kubernetes i molntjänst (aws, Azure eller Google).

- Övervakning.



[ Modifierad: Friday, 20 March 2020, 11:57 ]
 
Vem som helst (även för gäster)

miljö

Installera master


Masterrollen för Kubernetes kommer att installeras på easec-linux1, easec-linux2 och easec-linux3.

I .easec:s miljö är Docker redan installerat, i din miljö får du installera Docker och konfigurera Docker. För att konfigurera Docker för systemd och overlay2, se mitt blogginlägg: https://portal.easec.se/moodle/blog/index.php?entryid=43

 

Arbetsuppgift 1: Installera kubeadm, kubelet och kubectl

1. Anslut till Easec-Linux8 och logga på som easec med lösenordet Pa$$w0rd.

 2. På Easec-Linux8 öppna terminalfönstret (ctrl+alt+t) och skriv in följande kommando och klicka på Enter, för att ansluta till easec-linux1:

                      ssh easec-linux1

 Ange Pa$$w0rd som lösenord.

curl krypteringsnyckel

3. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att lägga till signeringsnyckel för Kubernetes:

                      curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

Ange Pa$$w0rd som lösenord för sudo.

sudo apt-add-repository

4. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att lägga till referens till förråd:

                      sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

5. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att uppdatera referenser:

                      sudo apt-get update

sudo apt-get install

6. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att installera:

                      sudo apt-get install -y kubeadm kubelet kubectl

sudo apt-mark

7. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att säkerställa att kubeadm kubelet och kubectl inte uppdateras:

                      sudo apt-mark hold kubeadm kubelet kubectl

sudo swapoff

8. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att stänga av swap och göra detta permanent:

                      sudo swapoff -a && sudo sed -i '/ swap / s/^/#/' /etc/fstab

9. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att avsluta anslutning till easec-linux1:

                      exit

10. Gör om punkt 2 – 9 för easec-linux2 respektive easec-linux3.


Arbetsuppgift 2: Initiera masternoder

1. På Easec-Linux8, i terminalfönstret, skriv in följande kommando och klicka på Enter, för att ansluta till easec-linux1:

                       ssh easec-linux1

 Ange Pa$$w0rd som lösenord.

 2. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa konfigurationsfil (notera att denna funktion fortfarande är i beta och kan förändras!):    Konfigurationsfil finns här: https://github.com/easec/cluster/blob/master/stacked/config.yaml

                        nano config.yaml

nano config.yaml

3. I fönstret med nano, skriv in följande:

                        apiVersion: kubeadm.k8s.io/v1beta2

                        kind: ClusterConfiguration

                        kubernetesVersion: stable

                        apiServer:

                        certSANs:

                        - "192.168.1.27"

                        controlPlaneEndpoint: "192.168.1.27:6443"

                        etcd:

                        external:

                        endpoints:

                        - https://192.168.1.21:2379

                        - https://192.168.1.22:2379

                        - https://192.168.1.23:2379

                        caFile: /etc/etcd/ca.pem

                        certFile: /etc/etcd/kubernetes.pem

                        keyFile: /etc/etcd/kubernetes-key.pem

                        networking:

                        podSubnet: 10.30.0.0/24

Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen.

sudo kubeadmin

4. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att initiera första nod:

                        sudo kubeadm init --config=config.yaml

Skriv in Pa$$w0rd som lösenord för sudo. Detta kommer att ta en stund!

Klart

Bild ovan visas när det är klart!

sudo scp

5. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att kopiera certifikat till de andra noderna:

                        sudo scp -r /etc/kubernetes/pki easec@192.168.1.22:~ && sudo scp -r /etc/kubernetes/pki easec@192.168.1.23:~

 Ange Pa$$w0rd som lösenord för sudo.

6. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att avsluta anslutning till easec-linux1:

                         exit

 7. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att ansluta till easec-linux2:

                         ssh easec-linux2

 Ange Pa$$w0rd som lösenord.

 8. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att ta bort certifikat och nyckel för api-server:

                         rm ~/pki/apiserver.*

sudo mv

9. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att flytta certifikat till katalogen /etc/kubernetes/:

                         sudo mv ~/pki /etc/kubernetes/

10. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa konfigurationsfil:

                         nano config.yaml

11. I fönstret med nano, skriv in följande:

                         apiVersion: kubeadm.k8s.io/v1beta2

                         kind: ClusterConfiguration

                         kubernetesVersion: stable

                         apiServer:

                         certSANs:

                         - "192.168.1.27"

                         controlPlaneEndpoint: "192.168.1.27:6443"

                         etcd:

                         external:

                         endpoints:

                         - https://192.168.1.21:2379

                         - https://192.168.1.22:2379

                         - https://192.168.1.23:2379

                         caFile: /etc/etcd/ca.pem

                         certFile: /etc/etcd/kubernetes.pem

                         keyFile: /etc/etcd/kubernetes-key.pem

                         networking:

                         podSubnet: 10.30.0.0/24

Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen.

sudo kubeadm

12. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att initiera andra noden:

                         sudo kubeadm init --config=config.yaml

 Skriv in Pa$$w0rd som lösenord för sudo. Precis som för easec-linux1 kommer detta att ta en stund!

sudo kubeadm del 2

Bild ovan visas när det är klart!

13. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att avsluta anslutningen till easec-linux2:

                         exit

14. Gör om punkt 7 – 12, för att initiera tredje noden. Innan du fortsätter med nästa steg, gör följande när du är ansluten till easec-linux3:

Kopiera

a. Markera textraderna som börjar med ”You can now join ..” enligt bild ovan, högerklicka och välj Kopiera.

b. Öppna Textredigeraren och klistra in texten.

lägg till sudo

c. Lägg till sudo innan kubeadm, både för control-plane nodes och för worker nodes, spara filen med namnet anslutning.txt.

15. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att avsluta anslutningen till easec-linux3:

                         exit




[ Modifierad: Thursday, 19 March 2020, 12:06 ]
 
Vem som helst (även för gäster)

ETCDCTL


Installera och konfigurera etcd


etcd kommer att installeras på easec-linux1, easec-linux2 och easec-linux3. Versionen är 3.4.4 som är den senaste när denna dokumentation skrevs (200317).

 

Arbetsuppgift 1: Kopiera certifikat till respektive maskin

1. Anslut till easec-linux8 och logga på som easec med lösenordet Pa$$w0rd.

scp ca.pem

2. På easec-linux8 öppna terminalfönstret (ctrl+alt+t) och skriv in följande kommando och klicka på Enter, för att kopiera certifikat till respektive maskin:

                    scp ca.pem kubernetes.pem kubernetes-key.pem easec@192.168.1.21:~

Ange Pa$$w0rd som lösenord. Om det är första gången du ansluter, får du skriva yes och klicka på Enter.

3. I terminalfönstret, upprepa föregående kommando, men ändra IP-adress till 192.168.1.22 respektive 192.168.1.23.

 

Arbetsuppgift 2: Installera etcd

1. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att ansluta till easec-linux1:

                    ssh easec-linux1

 Om det är första gången du ansluter, får du skriva in yes och klicka på Enter, skriv därefter in Pa$$w0rd för att ansluta.

sudo mkdir /etc/etcd /var/lib/etcd

2. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa konfigurationskataloger för etcd:

                    sudo mkdir /etc/etcd /var/lib/etcd

Skriv in Pa$$w0rd som lösenord för sudo.

sudo mv ~/ca.pem

3. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att flytta certifikat till katalogen /etc/etcd:

                    sudo mv ~/ca.pem ~/kubernetes.pem ~/kubernetes-key.pem /etc/etcd

wget etcd

4. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att ladda ner binärer för etcd:

                    wget https://github.com/etcd-io/etcd/releases/download/v3.4.4/etcd-v3.4.4-linux-amd64.tar.gz

tar xvzf

5. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att packa upp binärer för etcd:

                    tar xvzf etcd-v3.4.4-linux-amd64.tar.gz

sudo mv etcd

6. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att flytta binärer till /usr/local/bin:

                    sudo mv etcd-v3.4.4-linux-amd64/etcd* /usr/local/bin/


Arbetsuppgift 3: Skapa systemd-fil

 

1. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa systemd-fil:

                    sudo nano /etc/systemd/system/etcd.service

I mitt förråd på GitHub finns etcd.service-filer för respektive maskin (https://github.com/easec/cluster/tree/master/stacked)

sudo nano /etc/systemd/system/etcd.service

2. I fönstret för nano, skriv in följande:

 

                    [Unit]

                    Description=etcd

                    Documentation=https://github.com/coreos

 

                    [Service]

                    ExecStart=/usr/local/bin/etcd \

                     --name 192.168.1.21 \

                     --cert-file=/etc/etcd/kubernetes.pem \

                     --key-file=/etc/etcd/kubernetes-key.pem \

                     --peer-cert-file=/etc/etcd/kubernetes.pem \

                     --peer-key-file=/etc/etcd/kubernetes-key.pem \

                     --trusted-ca-file=/etc/etcd/ca.pem \

                     --peer-trusted-ca-file=/etc/etcd/ca.pem \

                     --peer-client-cert-auth \

                    --client-cert-auth \

                    --initial-advertise-peer-urls https://192.168.1.21:2380 \

                    --listen-peer-urls https://192.168.1.21:2380 \

                    --listen-client-urls https://192.168.1.21:2379,http://127.0.0.1:2379 \

                    --advertise-client-urls https://192.168.1.21:2379 \

                    --initial-cluster-token etcd-cluster-0 \

                    --initial-cluster 192.168.1.21=https://192.168.1.21:2380,192.168.1.22=https://192.168.1.22:2380,192.168.1.23=

                    https://192.168.1.23:2380 \

                    --initial-cluster-state new \

                    --data-dir=/var/lib/etcd

                    Restart=on-failure

                    RestartSec=5


                    [Install]

                    WantedBy=multi-user.target

 

Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen.

sudo systemctl daemon-reload

3. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att återinläsa konfigurationen för daemon:

                     sudo systemctl daemon-reload

sudo systemctl enable etcd

4. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att starta etcd vid uppstart:

                     sudo systemctl enable etcd

sudo systemctl start etcd

5. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att starta etcd:

                     sudo systemctl start etcd

6. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att avsluta session mot Easec-Linux1:

                     exit

7. Gör om arbetsuppgift 2 och 3 på easec-linux2 och easec-linux3 med respektive IP-adresser.


Arbetsuppgift 4: Verifiera klustret

ETCDCTL

1. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att verifiera klustret och att det är igång:

                     ETCDCTL_API=3 etcdctl member list



Notering felsökning:

Ibland händer det att det går fel :-), när systemd används så är kommandot journalctl ett bra verktyg för att se vad som har gått fel.

Exempelvis: sudo journalctl -u etcd.service (om det är etcd), eftersom det kan bli väldigt mycket information kan det vara bra att lägga denna i en textfil, för att sedan undersöka denna textfil lite närmare sudo journalctl -u etcd.service > logg.txt

Gör du förändringar, kör dessa kommando:

sudo systemctl daemon-reload

sudo systemctl restart etcd











[ Modifierad: Wednesday, 18 March 2020, 14:25 ]
 
Bild av Mats Johannesson
av Mats Johannesson - Tuesday, 17 March 2020, 13:51
Vem som helst (även för gäster)

Miljö

Installation av HA-proxy


HA-proxy kommer att installeras på Easec-Linux7 (192.168.1.27/24).

 

Arbetsuppgift 1: Installera HA-proxy

1. Anslut till Easec-Linux7 och logga på som easec med lösenordet Pa$$w0rd.

sudo apt-get update

2. På Easec-Linux7 öppna terminalfönstret (ctrl+alt+t) och skriv in följande kommando och klicka på Enter, för att uppdatera referenser till arkiv:

 

                  sudo apt-get update 

Ange Pa$$w0rd som lösenord för sudo.

sudo apt-get install haproxy

3. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att installera HA-proxy:

                  sudo apt-get install haproxy


Arbetsuppgift 2: Konfigurera HA-proxy

1.     I terminalfönstret, skriv in följande kommando och klicka på Enter, för att konfigurera HA-proxy:

                 sudo nano /etc/haproxy/haproxy.cfg

sudo nano /etc/haproxy/haproxy.cfg

2. I fönstret med nano, gör förändringar i fetstil:

 

                 global

                 ...

                 default

                 ...

                 frontend kubernetes

                              bind 192.168.1.27:6443

                              option tcplog

                              mode tcp

                              default_backend kubernetes-master-nodes


                  backend kubernetes-master-nodes

                              mode tcp

                              balance roundrobin

                              option tcp-check

                              server easec-linux1 192.168.1.21:6443 check fall 3 rise 2

                              server easec-linux2 192.168.1.22:6443 check fall 3 rise 2

                              server easec-linux3 192.168.1.23:6443 check fall 3 rise 2

 

Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen.

sudo systemctl restart haproxy

2. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att starta om HA-proxy:

                             sudo systemctl restart haproxy






[ Modifierad: Tuesday, 17 March 2020, 14:13 ]
 
Vem som helst (även för gäster)


Miljö

Del 1: Klientverktyg


På klientdator kommer två verktyg att behövas installeras, Cloud Flare SSL för att generera de olika certifikat som behövs och kubectl för att hantera klustret. Dessa verktyg installeras på Easec-Linux8.

 

Arbetsuppgift 1: Installera cfssl

1. Anslut till Easec-Linux8 och logga på som easec med lösenordet Pa$$w0rd.


Installation av cfssl

2. På Easec-Linux8 öppna terminalfönstret (ctrl+alt+t) och skriv in följande kommando och klicka på Enter:

          wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 && wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64

3. I terminalfönstret skriv in följande kommando och klicka på Enter, för att sätta exekveringsrättigheter:

           chmod +x cfssl*

Flytt av binärer

4. I terminalfönstret skriv in följande kommando och klicka på Enter, för att flytta binärer till /usr/local/bin:

            sudo mv cfssl_linux-amd64 /usr/local/bin/cfssl

            Ange Pa$$w0rd som lösenord för sudo.

5. I terminalfönstret skriv in följande kommando och klicka på Enter, för att flytta binärer till /usr/local/bin:

             sudo mv cfssljson_linux-amd64 /usr/local/bin/cfssljson

cfssl version

6. I terminalfönstret skriv in följande kommando och klicka på Enter, för att verifiera installationen:

             cfssl version


Arbetsuppgift 2: Installera kubectl

Installera kubectl

1. I terminalfönstret skriv in följande kommando och klicka på Enter, för att ladda ner binärer för kubectl:

              wget https://storage.googleapis.com/kubernetes-release/release/v1.17.3/bin/linux/amd64/kubectl

 2. I terminalfönstret skriv in följande kommando och klicka på Enter, för att sätta exekveringsrättigheter:

              chmod +x kubectl*

3. I terminalfönstret skriv in följande kommando och klicka på Enter, för att flytta binärer till /usr/local/bin:

              sudo mv kubectl /usr/local/bin

kubectl version

4. I terminalfönstret skriv in följande kommando och klicka på Enter, för att verifiera installationen:

              kubectl version

              Felmeddelande om att verktyget inte kan ansluta till server, kan du ignorera. Det finns ingen server eller servrar i detta läge!


Del 2: Certifikat

Ett antal certifikat kommer att behöva genereras.

Arbetsuppgift 1: Skapa Certificate Authority och generera certifikat

Konfiguration av CA

1. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa konfiguration för CA (Certificate Authority):

               nano ca-config.json

2. I fönstret med nano, skriv in följande:

               {

                   "signing": {

                      "default": {

                         "expiry": "8760h"

                       },

                       "profiles": {

                           "kubernetes": {

                               "usages": ["signing", "key encipherment", "server auth", "client auth"],

                               "expiry": "8760h"

                        }

                     }

                   }

                 }

Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen. 

nano ca-csr.json

3. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa certifikatbegäran för CA:

                  nano ca-csr.json

4. I fönstret med nano, skriv in följande:

                  {

                     "CN": "Kubernetes",

                     "key": {

                     "algo": "rsa",

                     "size": 2048

                   },

                   "names": [

                   {

                      "C": "SE",

                      "L": "Lomma",

                      "O": "Kubernetes",

                      "OU": "CA",

                      "ST": "easec"

                     }

                   ]

                  }

 Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen.

cfssl gencert

5. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa certifikat och privat nyckel:

                  cfssl gencert -initca ca-csr.json | cfssljson -bare ca

ls -la ca*

6. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att verifiera att ca-key.pem och ca.pem har blivit genererade:

                   ls -la ca*

7. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att skapa certifikatbegäran för etcd-kluster:

                   nano kubernetes-csr.json

nano kubernetes-csr.json

8. I fönstret med nano, skriv in följande:

                 {

                     "CN": "kubernetes",

                     "key": {

                     "algo": "rsa",

                     "size": 2048

                   },

                   "names": [

                   {

                      "C": "SE",

                      "L": "Lomma",

                      "O": "Kubernetes",

                      "OU": "Kubernetes",

                      "ST": "easec"

                     }

                   ]

                  }

 

Klicka på ctrl+x, skriv in ett J och klicka på Enter för att spara filen.


Arbetsuppgift 2: Skapa certifikat och privat nyckel

cfssl gencert

1. I terminalfönstret, skriv in följande kommando och klicka på Enter efter varje \ och efter sista raden:

                    cfssl gencert \

                    -ca=ca.pem \

                    -ca-key=ca-key.pem \

                    -config=ca-config.json \

                    -hostname=192.168.1.21,192.168.1.22,192.168.1.23, 192.168.1.27,127.0.0.1,kubernetes.default \

                    -profile=kubernetes kubernetes-csr.json | \

                    cfssljson -bare kubernetes

ls -la k*

2. I terminalfönstret, skriv in följande kommando och klicka på Enter, för att verifiera att kubernetes-key.pem och kubernetes.pem har skapats:

                     ls -la k*



[ Modifierad: Monday, 16 March 2020, 20:31 ]
 
Bild av Mats Johannesson
av Mats Johannesson - Sunday, 15 March 2020, 21:16
Vem som helst (även för gäster)

Kluster

.easec kommer att publicera ett antal artiklar där konfiguration av Kubernetes i drift beskrivs. 


De olika delarna:

Del 1: Certifikat och klientverktyg. https://portal.easec.se/moodle/blog/index.php?entryid=39

Del 2: HA-Proxy. https://portal.easec.se/moodle/blog/index.php?entryid=40

Del 3: Installera och konfigurera etcd. https://portal.easec.se/moodle/blog/index.php?entryid=41

Del 4: Installera master. https://portal.easec.se/moodle/blog/index.php?entryid=44

Del 5: Installera worker. https://portal.easec.se/moodle/blog/index.php?entryid=45



[ Modifierad: Friday, 20 March 2020, 11:52 ]
 
Bild av Mats Johannesson
av Mats Johannesson - Thursday, 5 March 2020, 21:13
Vem som helst (även för gäster)

Roll för Ops och för Dev


Arbeta med bestående lagring i Kubernetes


När jag har läst dokumentationen från Kubernetes, så har det varit lite svårt att förstå hur detta konfigureras. Så det är väl lika bra att gå igenom detta steg för steg.


Övergripande steg

  1. Konfigurera lagring.
  2. Skapa .yaml-fil för lagring  (ansvaret ligger på Ops). 
  3. Skapa .yaml-fil för begäran (eng. claim) (ansvaret ligger på Dev).
  4. Skapa .yaml-fil för pod som för lagringsdelen refererar til claim (ansvaret ligger på Dev).
  5. Starta pod.
Beroende lite på funktionalitet kan storageClass behöva konfigureras. I mitt kursmaterial finns detta beskrivet dels i det teoretiska materialet, men även i en övning där lokal lagring skall användas. 


Steg 1. Konfigurera lagring

Detta beror på vilken typ av lagring som skall användas. I mina övningsexempel används både lokal lagring på nod (easec-linux2) och på NFS-server. Båda dessa kommer att behöva konfigureras. Kubernetes kan arbeta med en mängd olika typer av lagring och som finns både lokalt och i molntjänst.

Exemplet i denna blogg kommer att använda NFS-server. För att underlätta lite i kurs- och labbsammanhang har .easec tagit fram en docker-container för detta syfte. Dockerfile för denna container finns här: https://github.com/easec/nfs-server . I andra sammanhang är det alltid bäst att sätta upp en "riktig" NFS-server.

Förutsättningar: Docker installerat och Kubernetes uppsatt enligt .easec:s specifikationer. git installerat liksom nfs-utils  (på Ubuntu: sudo apt-get install nfs-kernel-server) på alla ingående maskiner.

På https://github.com/easec/Kubernetes finns alla .yaml-filer som refereras, klona dessa till din hemmakatalog med kommandot git clone https://github.com/easec/Kubernetes.git .


1. Öppna terminalfönstret och skriv in följande kommando och klicka på Enter efter varje rad:

    docker run -d --net=host \ 

    --privileged --name nfs-server \

    easec/nfs-server \

    /exports/data-0001 /exports/data-0002

    Container kommer att exponera två stycken kataloger, /exports/data-0001 och /exports/data-0002.


Steg 2: Skapa .yaml-fil för lagring (pv)

1. Om du har klonat mitt arkiv, förflytta dig till katalogen Kubernetes/persistent-volumes.

2. Öppna filen nfs-0001.yaml i din editor.

nfs-0001

Lägg märke till att kapacitet anges under spec:, accessModes anger typ av access, i mitt kursmaterial har jag beskrivit de olika typerna av access som finns. På ett liknande sätt finns det även beskrivit de olika typerna av persistentVolumeReclaimPolicy som finns. Under nfs: anges anslutningsinformation till den maskin där docker-container med NFS-server körs och i detta fallet den första katalogen.

3. Applicera denna .yaml-fil med kommandot: kubectl create -f nfs-0001.yaml .

4. Öppna filen nfs-0002.yaml i din editor.

nfs-0002

Denna .yaml-fil liknar den första, med två undantag. Det första undantaget är kapaciteten (i den första var den satt till 2Gi) som är satt till 5Gi och det andra undantaget är referens till katalog och i detta fallet pekar denna på den andra katalogen som exponeras av NFS-server.

5. Applicera denna .yaml-fil med kommandot: kubectl create -f nfs-0002.yaml .

kubectl get pv

6. För att se alla PersistentVolumes i klustret, använd kommandot kubectl get pv .

 

Steg 3: Skapa .yaml-fil för claim (pvc)

1. Öppna filen pvc-mysql.yaml i din editor.

pvc-mysql.yaml

Denna fil beskriver vad som begärs av eventuell pod som kopplas mot denna claim. I detta fallet kommer det att krävas att lagringen har möjlighet att exponera 3Gi. Går du tillbaks lite i denna bloggtext, så ser du att det är bara pv mot nfs-0002 som har denna kapacitet.


2. Applicera denna .yaml-fil med kommandot: kubectl create -f pvc-mysql.yaml .

3. Öppna filen pvc-http.yaml i din editor.

pvc-http.yaml

Precis som tidigare fil (pvc-mysql.yaml) beskriver denna vad som begärs av eventuell pod som kopplas mot denna claim. I detta fallet kommer det att krävas att lagringen har möjlighet att exponera 1Gi.

4. Applicera denna .yaml-fil med kommandot: kubectl create -f pvc-http.yaml .

kubectl get pvc

5. För att se alla claims i klustret, använd kommandot kubectl get pvc . När du har kört kommandot, kommer du att se att claim-http är associerat med nfs-0001 och claim-mysql är associerat med nfs-0002. Du kan även se den totala kapaciteten för respektive lagring.


Steg 4: Skapa .yaml-fil för pods

1. Öppna filen pod-mysql.yaml i din editor. 

pod-mysql

Under sektionen containers kan du se att pod kommer att baseras på avspeglingen openshift/mysql-55-centos7, ett antal miljövariabler är definierade (i produktion används exempelvis Secrets för detta), monterar volym till katalogen /var/lib/mysql/data. Under sektionen volumes finns referens till claim-mysql.

2. Öppna filen pod-http.yaml i din editor. 

pod-html

Under sektionen containers kan du se att pod kommer att baseras på avspeglingen nginx:alpine, port 80 kommer att exponeras, monterar volym till katalogen /usr/share/nginx/html. Under sektionen volumes finns referens till claim-http.


Steg 5: Starta pods
1. Starta pod-mysql med kommandot: kubectl create -f pod-mysql.yaml . Vi kommer inte att använda denna, annat än för att se att den plockar "rätt" lagring utifrån claim.


2. Starta pod-http med kommandot: kubectl create -f pod-http.yaml .

kubect get pods

3. Använd kommandot kubectl get pods för att verifiera att dessa körs. Tänk på om du inte installerade nfs-utils (på Ubuntu: sudo apt-get install nfs-kernel-server) på noderna, kommer någon pod att stå läget att den skapas under längre tid. För att se vad som händer, kan du använda kommandot kubectl describe pod <namnet_på_denna_pod>, troligtvis har du ett felmeddelande att volym inte kan monteras. Installera nfs-utils och strax kommer du att se att pod är i läget Ready,


Extra: verifiera funktion

docker exec

1. Anslut till docker-container nfs-server och skapa index.html, använd kommandot:  docker exec -it nfs-server bash -c "echo '<h1> The end is near</h1>You are not getting any younger and neither are your forms.' > /exports/data-0001/index.html" . Om du vill ansluta till pod kan du använda kommandot kubectl exec -it <namn_på_pod> bash .

ip

2. Ta reda på IP-adress för pod, genom att använda följande kommando: ip=$(kubectl get pod www -o yaml | grep podIP | awk '{split($0,a,":"); print a[2]}'); echo $ip .

curl_ip

3. Verifiera med kommandot curl $ip att texten du skrev in under punkt 1 visas.

the end is near

4. Om du har webbläsare, kan du ansluta denna till pod och texten du skrev in under punkt  1 visas.

I .easec:s kurs arbetar du vidare med dessa pods.


Rensa

Använd stegen nedan för att rensa din miljö!

1. Använd kommandot kubectl delete pod www mysql för att plocka bort pods.

2. Använd kommandot kubectl delete pvc claim-http claim-mysql för att plocka bort pvc.

3. Använd kommandot kubectl delete pv nfs-0001 nfs-0002 för att plocka bort pv.

4. Använd kommandot docker stop nfs-server && docker rm nfs-server för att stänga ner docker-container och plocka bort denna.






[ Modifierad: Friday, 6 March 2020, 10:39 ]
 
Sida: 1 2 ()

  
RSS