Zumpyx's Blog

Kubernetes 笔记

k8sdevops

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]]
  • 检查对应端口是否开放(64432379-2380102501025910257)
  • 安装 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