Créer un namespace
kubectl create namespace funstuff
kubectl config set-context --current --namespace=funstuff
Deployer une application mypython
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: mypython-deployment
spec:
replicas: 1
selector:
matchLabels:
app: mypython
template:
metadata:
labels:
app: mypython
spec:
containers:
- name: mypython
image: quay.io/rhdevelopers/mypython:v1
ports:
- containerPort: 8000
EOF
Deployer une application mygo
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: mygo-deployment
spec:
replicas: 1
selector:
matchLabels:
app: mygo
template:
metadata:
labels:
app: mygo
spec:
containers:
- name: mygo
image: quay.io/rhdevelopers/mygo:v1
ports:
- containerPort: 8000
EOF
Deployer une application mynode
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: mynode-deployment
spec:
replicas: 1
selector:
matchLabels:
app: mynode
template:
metadata:
labels:
app: mynode
spec:
containers:
- name: mynode
image: quay.io/rhdevelopers/mynode:v1
ports:
- containerPort: 8000
EOF
Vérifier l’état des applications
watch kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
mygo-deployment-6d944c5c69-kcvmk 1/1 Running 0 2m11s app=mygo,pod-template-hash=6d944c5c69
mynode-deployment-fb5457c5-hhz7h 1/1 Running 0 2m1s app=mynode,pod-template-hash=fb5457c5
mypython-deployment-6874f84d85-2kpjl 1/1 Running 0 3m53s app=mypython,pod-template-hash=6874f84d85
Déployer un service générique
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
name: my-service
labels:
app: mystuff
spec:
ports:
- name: http
port: 8000
selector:
inservice: mypods
type: LoadBalancer
EOF
Observer la description de ce service
kubectl describe service my-service
Observer la présence de EndPoint
kubectl get endpoints
NAME ENDPOINTS AGE
my-service <none> 2m6s
Recherche l’adresse IP du EndPoint
kubectl get endpoints my-service -o json | jq '.subsets[].addresses[].ip'
jq: error (at <stdin>:18): Cannot iterate over null (null)
Définir les variables IP et PORT
IP=$(minikube ip -p devnation)
PORT=$(kubectl get service/my-service -o jsonpath="{.spec.ports[*].nodePort}")
Faire une requete au service
curl $IP:$PORT
Faire une boucle de requete au service
while true
do curl $IP:$PORT
sleep .3
done
curl: (7) Failed to connect to 35.224.233.213 port 8000: Connection refused
curl: (7) Failed to connect to 35.224.233.213 port 8000: Connection refused
Ajouter un label à un pod
kubectl label pod -l app=mypython inservice=mypods
curl: (7) Failed to connect to 35.224.233.213 port 8000: Connection refused
Python Hello on mypython-deployment-6874f84d85-2kpjl
Python Hello on mypython-deployment-6874f84d85-2kpjl
Python Hello on mypython-deployment-6874f84d85-2kpjl
kubectl label pod -l app=mynode inservice=mypods
Python Hello on mypython-deployment-6874f84d85-2kpjl
Python Hello on mypython-deployment-6874f84d85-2kpjl
Node Hello on mynode-deployment-fb5457c5-hhz7h 0
Node Hello on mynode-deployment-fb5457c5-hhz7h 1
Python Hello on mypython-deployment-6874f84d85-2kpjl
Python Hello on mypython-deployment-6874f84d85-2kpjl
Python Hello on mypython-deployment-6874f84d85-2kpjl
kubectl label pod -l app=mygo inservice=mypods
Node Hello on mynode-deployment-fb5457c5-hhz7h 59
Node Hello on mynode-deployment-fb5457c5-hhz7h 60
Go Hello on mygo-deployment-6d944c5c69-kcvmk
Python Hello on mypython-deployment-6874f84d85-2kpjl
Python Hello on mypython-deployment-6874f84d85-2kpjl
Recherche les IP du EndPoint
kubectl get endpoints my-service -o json | jq '.subsets[].addresses[].ip'
"10.130.2.43"
"10.130.2.44"
"10.130.2.45"
Afficher les pods avec les labels
kubectl get pods -o wide
Supprimer l’application mypython du service
kubectl label pod -l app=mypython inservice-
kubectl get endpoints my-service -o json | jq '.subsets[].addresses[].ip'-
"10.130.2.44"
"10.130.2.45"
Supprimer le namespace
kubectl delete namespace funstuff