rtfd/rtfd/public/kubernetes/index.rst
Marc Beninca ad670c36ff ns,jobs
2023-07-09 07:26:28 +02:00

281 lines
3.2 KiB
ReStructuredText

**********
Kubernetes
**********
* Deployment → ReplicaSet → Pods → Containers
* 1 IP address per pod
Pods
====
Read
----
.. code:: shell
kubectl \
get pods \
-n my-namespace
Execute
-------
.. code:: shell
kubectl \
run my-pod \
--image my-image \
--restart Never \
-n my-namespace
Write
-----
.. code:: shell
kubectl edit \
pod my-pod \
-n my-namespace
.. code:: shell
kubectl delete \
pod my-pod \
-n my-namespace \
--grace-period 0
Deployments
===========
Read
----
.. code:: shell
kubectl get \
deploy my-deployment \
-n my-namespace \
-o wide
.. code:: shell
kubectl get \
deployments \
-n my-namespace
Execute
-------
.. code:: shell
kubectl create \
deploy my-deployment \
--image my-image \
-n my-namespace
.. code:: yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: my-image
Write
-----
.. code:: shell
kubectl \
set image \
deployment/my-deployment \
my-app=my-app:1.0.1 \
-n my-namespace
.. code:: shell
kubectl \
delete deploy my-deployment \
-n my-namespace
Scale
-----
.. code:: shell
kubectl \
scale deploy my-deployment \
--replicas 3 \
-n my-namespace
Services
========
* ClusterIP (internal)
* ExternalName (internal alias for external DNS)
* LoadBalancer (external dedicated IP) [if available]
* NodePort (exposed via node)
Read
----
.. code:: shell
kubectl \
get services \
-n my-namespace
.. code:: shell
kubectl \
get service my-service \
-n my-namespace
Write
-----
.. code:: shell
kubectl \
expose deployment my-deployment \
--type LoadBalancer \
--name my-load-balancer \
--target-port 8080 \
-n my-namespace
.. code:: shell
kubectl \
delete service my-service \
-n my-namespace
.. code:: shell
kubectl \
edit service my-service \
-n my-namespace
.. warning::
ClusterIP is immutable!
NameSpaces
==========
Special:
* default
* kube-node-lease
* kube-public
* kube-system
Outside:
* Nodes
* Pod Security Policies
* Persistent Volumes
.. code:: shell
kubectl api-resources \
--namespaced false
Read
----
.. code:: shell
kubectl \
get namespaces
Write
-----
.. code:: shell
kubectl \
create ns my-namespace
.. code:: shell
kubectl \
delete ns my-namespace
Jobs
====
* one-time
* sequential
* parallel
CronJob → Job → Pods
Read
----
.. code:: shell
kubectl \
get jobs \
-n my-namespace
Write
-----
.. code:: shell
kubectl \
create job my-job \
--image my-image \
-n my-namespace
.. code:: shell
kubectl \
create job my-job \
--from cronjob/my-cronjob \
-n my-namespace
.. code:: shell
kubectl \
apply -f file.yaml \
-n my-namespace
.. code:: yaml
apiVersion: batch/v1
kind: Job
metadata:
name: my-job
spec:
activeDeadlineSeconds: 60
backoffLimit: 4
completions: 1
parallelism: 1
template:
spec:
containers:
- name: my-container
image: my-image
restartPolicy: OnFailure
.. code:: shell
kubectl \
delete job my-job \
-n my-namespace
.. code:: shell
kubectl \
delete job my-job \
cascade=false \
-n my-namespace