在当今的云计算时代,Kubernetes(简称K8s)已经成为容器编排领域的事实标准。对于想要掌握Kubernetes的开发者和管理员来说,以下是一份详细的学习资料清单,帮助你从入门到精通。

第一节:Kubernetes基础

1.1 什么是Kubernetes?

Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它允许您以声明性方式定义、部署和管理容器化应用程序。

1.2 Kubernetes核心组件

  • etcd:键值存储系统,用于存储所有集群的状态信息。
  • Master节点:包括API服务器、调度器和控制平面组件。
  • Node节点:运行应用程序容器的机器,包括Kubelet、容器运行时(如Docker)和网络插件。

1.3 Kubernetes术语

  • Pod:Kubernetes最小的部署单元,可以包含一个或多个容器。
  • ReplicaSet:一组Pod,用于保持特定数量的Pod副本。
  • Deployment:用于自动化部署、扩展和管理Pod的控制器。
  • Service:一种抽象,用于将访问流量分发到一组Pod。
  • Ingress:用于管理外部访问到集群中服务的路由。

第二节:Kubernetes安装与配置

2.1 环境准备

在开始之前,确保您的系统满足以下要求:

  • 操作系统:Ubuntu 18.04或CentOS 7
  • 硬件:至少2GB内存
  • Docker:版本17.03或更高

2.2 安装Docker

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt-get update
sudo apt-get install -y docker-ce
sudo systemctl start docker
sudo systemctl enable docker

2.3 安装Kubernetes

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo systemctl start kubelet
sudo systemctl enable kubelet

2.4 验证安装

kubectl version --client
kubectl cluster-info

第三节:Kubernetes实战

3.1 创建Pod

# mypod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: myapp
    image: nginx
kubectl apply -f mypod.yaml
kubectl get pods

3.2 创建Service

# myservice.yaml
apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
kubectl apply -f myservice.yaml
kubectl get svc

3.3 创建Deployment

# mydeployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mydeployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: nginx
kubectl apply -f mydeployment.yaml
kubectl get deployment

第四节:Kubernetes进阶

4.1 StatefulSet

StatefulSet是用于管理有状态容器的控制器。与Deployment类似,但它为每个Pod提供了稳定的持久化存储和唯一的主机名。

4.2 Horizontal Pod Autoscaler (HPA)

HPA可以根据CPU或内存使用情况自动调整Pod副本数量。

# myhpa.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: myhpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: mydeployment
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 50
kubectl apply -f myhpa.yaml

4.3 Ingress Controller

Ingress Controller用于管理外部访问到集群中服务的路由。

# 安装Nginx Ingress Controller
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/manifestNGINX.yaml

第五节:Kubernetes资源管理

5.1 Kubernetes资源配额和限制

资源配额和限制可以帮助您控制集群中的资源使用量,确保没有单个用户或命名空间滥用资源。

# resourcequota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: myquota
spec:
  hard:
    requests.cpu: "1"
    limits.cpu: "2"
    memory: 100Mi
    persistentvolumeclaims: 1
kubectl apply -f resourcequota.yaml

5.2 命名空间

命名空间可以帮助您组织资源,例如将集群资源分配给不同的团队或项目。

# 创建命名空间
kubectl create namespace mynamespace
# 查看命名空间
kubectl get ns

第六节:Kubernetes监控与日志

6.1 Prometheus

Prometheus是一个开源监控系统,用于收集、存储和可视化时间序列数据。

# 安装Prometheus
kubectl apply -f https://raw.githubusercontent.com/coreos/kube-prometheus/master/manifests/01-prometheus-namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/coreos/kube-prometheus/master/manifests/02-alertmanager-namespace.yaml

6.2 Fluentd

Fluentd是一个开源的数据收集和传输系统,可以与Kubernetes集群集成以收集日志。

# 安装Fluentd
kubectl apply -f https://github.com/fluent/fluentd-kubernetes-daemonset/releases/download/v1.7.3/fluentd-deployment.yaml

总结

Kubernetes是一个强大的容器编排平台,可以帮助您轻松部署、扩展和管理容器化应用程序。通过以上学习资料,您应该已经具备了掌握Kubernetes的基础知识和实战能力。继续深入学习并实践,您将能够更好地利用Kubernetes的强大功能,为您的应用程序提供高效、可靠的基础设施支持。祝您学习愉快!