Kubernetes 笔记
Kubernetes 集群架构
Nodes
Kubernetes 通过将容器放入 pod 中以节点
Kubernetes 主要由以下几个核心组件组成:
- etcd 保存了整个集群的状态;
- apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;
- controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
- scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
- kubelet 负责维护容器的生命周期,同时也负责 Volume(CSI)和网络(CNI)的管理;
- Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI);
- kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡;
除了核心组件,还有一些推荐的插件,其中有的已经成为 CNCF 中的托管项目:
- CoreDNS 负责为整个集群提供 DNS 服务
- Ingress Controller 为服务提供外网入口
- Prometheus 提供资源监控
- Dashboard 提供 GUI
- Federation 提供跨可用区的集群
![[assets/Pasted image 20240105161635.png]]
安装 Kubernetes 集群
在此之前,可以使用 Minikube 快速体验。
安装管理工具
- 更新系统
sudo apt update
sudo apt upgrade
sudo snap refresh
reboot
环境检查
- 禁用 Sawp c ![[assets/Pasted image 20240108132704.png]]
- 检查各节点网卡 Mac 是否唯一
ip link; sudo cat /sys/class/dmi/id/product_uuid![[assets/Pasted image 20240108132726.png]] - 检查对应端口是否开放(
6443、2379-2380、10250、10259、10257) - 安装 Runtime - docker
sudo groupadd --system docker
sudo usermod -aG docker ubuntu
sudo snap install docker --classic
sudo docker version
选择一个 Runtime
| Runtime | Path to Unix domain socket |
|---|---|
| containerd | unix:///var/run/containerd/containerd.sock |
| CRI-O | unix:///var/run/crio/crio.sock |
| Docker Engine (using cri-dockerd) | unix:///var/run/cri-dockerd.sock |
- containerd
- CRI-O
- Docker Engine
安装
kubectl
kubeadm
kubelet
kind
mimikube
- kubectl、kubeadm、kubelet
sudo snap install kubectl --classic
sudo snap install kubeadm --classic
sudo snap install kubelet --classic
kubectl version
kubeadm version
kubelet --version
- kind
# For AMD64 / x86_64
[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
sudo chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
kind --version
- mimikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube version
测试
mimikube
kubectl get pods
kubectl get nodes
kubectl get services
kubectl get deployment
# 创建 deployment 的 nginx pod
kubectl create deployment nginx-depl --image=nginx
# 编辑
kubectl edit deployment [name]
# 删除
kubectl delete deployment [name]
# 查看 pod 相关信息
kubectl describe pod [pod full name]
# 查看 pod service 信息
kubectl describe service [pod name]
# 查看复制集
kubectl get replicaset
# 查看 pod 日志
kubectl logs [pod full name]
# Shell
kubectl exec -it [pod full name] /bin/bash
# 通过配置文件启动/删除 pod
kubectl apply -f nginx-deployment.yaml
kubectl delete -f nginx-deployment.yaml
