Kubernetes (k8s) is an open-source system for automating deployment, scaling, and management of containerized applicasions. The core components include:
- Master Node:
kube-apiserver: API entry point for cluster operationsetcd: Distributed key-value store for cluster datakube-scheduler: Assigns pods to nodesController Manager: Manages replication, node health, etc.
- Worker Node:
kubelet: Node agent for container managementkube-proxy: Network proxy for service discoveryContainer Runtime: Docker, containerd, etc.
Core Concepts
| Term | Description |
|---|---|
| Pod | Samllest deployable unit containing one or more containers sharing network |
| Deployment | Manages pod replicas and rolling updates |
| Service | Abstracts pod access with load balancing |
| Label | Key-value pairs for resource organization |
| Namespace | Logical isolation for resources |
| Volume | Persistent storage for pods |
Cluster Installation Steps
- Prerequisites:
- Minimum 2GB RAM, 2 CPUs
- Disable swap
- Install Docker
- Initialize Master Node: ```
kubeadm init
--apiserver-advertise-address=10.0.2.15
--image-repository registry.aliyuncs.com/google_containers
--kubernetes-version v1.17.3
--service-cidr=10.96.0.0/16
--pod-network-cidr=10.244.0.0/16 - Join Worker Nodes: ```
kubeadm join 10.0.2.15:6443
--token abcdef.0123456789abcdef
--discovery-token-ca-cert-hash sha256:1234567890abcdef - Install CNI Plugin: ```
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
KubeSphere Installation
- Install Helm: ```
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
- Configure Tiller: ```
kubectl create serviceaccount tiller -n kube-system
kubectl create clusterrolebinding tiller --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
- Deploy KubeSphere: ```
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.1.1/kubesphere-installer.yaml
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.1.1/cluster-configuration.yaml
- Monitor Installation: ```
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
YAML Configuraton Examples
Deployment Example
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
ports:
- containerPort: 8080
Service Example
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
nodePort: 30001
selector:
app: myapp
Ingress Example
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp-service
port:
number: 80
ingressClassName: nginx