vault backup: 2023-08-26 11:34:11
This commit is contained in:
113
software/Kubernetes.md
Normal file
113
software/Kubernetes.md
Normal file
@ -0,0 +1,113 @@
|
||||
# Vocabulary
|
||||
https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-intro/ - Good summary of the different parts
|
||||
## Cluster
|
||||
The largest unit, a kubernetes cluster is a collection of one or more worker machines (virtual or physical machines), and the control plane.
|
||||
|
||||
## Control plane
|
||||
A control plane is in charge of managing worker nodes and pods in a cluster.
|
||||
|
||||
## Node
|
||||
[A node](https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-intro/) is a virtual or physical machine that in Kubernetes, and is managed by the control plane. A Node can have multiple pods, and the control plane is in charge of scheduling pods across nodes.
|
||||
|
||||
Each node runs at least:
|
||||
- A Kubelet, the process responsible for handling communication between the control plane and the node. It manages the pods and containers running on a machine
|
||||
- A [container runtime](https://kubernetes.io/docs/setup/production-environment/container-runtimes/) responsible for pulling the container image from a registry, unpacking the container, and running the application. Examples include containerd and docker.
|
||||
|
||||
## Deployment
|
||||
A [deployment](https://kubernetes.io/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/) instructs kubernetes how to create and update instances of an application. It can be imagined similar to a blueprint. The term 'deployment' may also refer to the group of pods and replicas defined by one or more configuration files.
|
||||
|
||||
## Pod
|
||||
A [pod](https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-intro/) is an abstraction that represents a group of one or more application containers, and shared resources. Some shared include storage and a private network. They are meant to represent a logical host, and a rough parallel might be a physical machine running a service, although this machine may have multiple network adapters. A deployment creates pods, and not containers.
|
||||
|
||||
## ReplicaSet
|
||||
A [ReplicaSet](https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/), often referred to as a pod replica, is an identical copy of pod. They can be used for many things, most commonly high availability and load balancing.
|
||||
|
||||
## Service
|
||||
A [service](https://kubernetes.io/docs/concepts/services-networking/service/) in Kubernetes is is an abstraction that defines a logical set of Pods and a policy to access them. A Service is defined using YAML or JSON, and is primarily used to expose a network application that's running on one or more Pods in a cluster. They also route traffic across a set of Pods, allowing Pods to die and replicate without impacting the application.
|
||||
|
||||
## `kubectl`
|
||||
`kubectl` is the Kubernetes command line tool used to run commands against clusters. You can use `kubectl` to deploy applications, inspect and manage cluster resources, and view logs. The general format of the command follows `kubectl [action] [resource]`
|
||||
|
||||
## `minikube`
|
||||
`minikube` creates a local Kubernetes cluster for development. It can be configured to deploy on bare metal, containers (like docker), or a VM (QEMU).
|
||||
|
||||
# Commands
|
||||
## Common commands
|
||||
- **kubectl get** - list resources
|
||||
- **kubectl describe** - show detailed information about a resource
|
||||
- **kubectl logs** - print the logs from a container in a pod
|
||||
- **kubectl exec** - execute a command on a container in a pod
|
||||
## Start `minikube`
|
||||
```
|
||||
minikube start
|
||||
```
|
||||
|
||||
## Stop `minikube`
|
||||
```
|
||||
minikube stop
|
||||
```
|
||||
|
||||
## Expose services running in minikube
|
||||
```
|
||||
minikube services
|
||||
```
|
||||
|
||||
## View the dashboard for `minikube`(run in new terminal window)
|
||||
```
|
||||
minikube dashboard
|
||||
```
|
||||
|
||||
## Check that `kubectl` is configured to talk to the cluster
|
||||
```
|
||||
kubectl version
|
||||
```
|
||||
|
||||
## View nodes in the server
|
||||
```
|
||||
kubectl get nodes
|
||||
```
|
||||
|
||||
## List deployments
|
||||
```
|
||||
kubectl get deployments
|
||||
```
|
||||
|
||||
## Start a proxy to access the private network
|
||||
```
|
||||
kubectl proxy
|
||||
```
|
||||
|
||||
## Access the API of a pod (through the proxy)
|
||||
```
|
||||
curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/
|
||||
```
|
||||
Where `$POD_NAME` is the name of a pod, you can get this information with `kubectl get pods`
|
||||
|
||||
## Start a Bash session in a Pod's container
|
||||
```
|
||||
kubectl exec --ti $POD_NAME -- bash
|
||||
```
|
||||
|
||||
## Create a new Service and expose it to external traffic
|
||||
```
|
||||
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
|
||||
```
|
||||
|
||||
## Apply a new label to pods
|
||||
```
|
||||
kubectl label pods "$POD_NAME" version=v1
|
||||
```
|
||||
|
||||
## See if a Service is load-balancing traffic
|
||||
```
|
||||
kubectl describe services/$SERVICE_NAME
|
||||
```
|
||||
|
||||
## Set a different desired amount of replicas for a deployment
|
||||
```
|
||||
kubectl scale deployments/$DEPLOYMENT_NAME --replicas=$DESIRED_NUM_OF_REPLICAS
|
||||
```
|
||||
|
||||
# Tutorials
|
||||
https://kubernetes.io/docs/tutorials/hello-minikube/
|
||||
https://kubernetes.io/docs/tutorials/kubernetes-basics/
|
15
software/Rewriting TS.md
Normal file
15
software/Rewriting TS.md
Normal file
@ -0,0 +1,15 @@
|
||||
|
||||
TS is currently written in Python, depending on a technically EOL version of the discord.py library. It has grown to a massive scale, and provides all of the functionality that is critical for the server, but has some downsides.
|
||||
- The codebase is not documented very well, which makes changes to the core system difficult.
|
||||
- Python suffers from performance issues that have proven be meaningful at the scale of the server (they have been addressed)
|
||||
- The migration to a new discord.py version is proving to be extremely troublesome
|
||||
|
||||
However, sticking with the system we currently definitely offers some pros:
|
||||
- It functions and is largely bug free, proving stable enough for our use case, with the reliability proving to be mostly dependent on the host.
|
||||
- Eff is contributing, however the level at which he will end up contributing to the project is uncertain
|
||||
- Once totally 'cleaned up', sticking with TS may be perfectly acceptable
|
||||
|
||||
Rewriting TS offers some pros:
|
||||
- We can document it as we go and decide on design patterns and practices to stick to before implementation begins
|
||||
- We evaluate the scale that TS needs to fit, and design according to that
|
||||
- We can switch to a language that may prove to be more performant/versatile, should we decide discord.py and python are not the best tool for our needs
|
Reference in New Issue
Block a user