您的位置:

K8s快速入门详解

一、容器与K8s

1、什么是容器

容器是一种轻量级的、可移植的虚拟化技术,将应用程序及其所有依赖项打包到一个可移植的图像中,以便在不同的计算环境中运行。容器提供了与虚拟机类似的隔离性,可以帮助开发人员在不同的环境中更加轻松地构建、打包、分发和部署应用程序。

2、什么是Kubernetes

Kubernetes(简称为K8s)是一个开源的容器编排平台。它可以帮助我们自动化地部署、扩展和管理容器化的应用程序,从而让我们更加轻松地管理复杂的分布式应用程序,同时也降低了运维的成本。

3、容器与K8s的关系

容器是K8s里面的基本组件,K8s通过容器对应用程序及其依赖项进行打包、分发和部署。K8s还提供了许多高级功能,比如负载均衡、伸缩、自动化应用程序部署等,可以帮助我们更加有效地管理容器化的应用程序。

二、K8s快速入门

1、环境准备


# 安装Minikube
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \ 
  && chmod +x minikube && sudo mv minikube /usr/local/bin/
# 安装Kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s \ 
    https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl \ 
    && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
# 启动Minikube集群
minikube start

2、创建一个Deployment


# 创建一个Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  # 应用程序副本数
  replicas: 3
  selector:
    # 匹配标签
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          # 镜像名称
          image: nginx:1.14.2
          ports:
            - containerPort: 80

3、创建一个Service


# 创建一个Service
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: LoadBalancer

4、访问应用程序


kubectl get service nginx-service
# 输出类似如下内容
# NAME            TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
# nginx-service   LoadBalancer   10.0.142.100   
        80:30709/TCP   111s
# 访问 EXTERNAL-IP:80 即可访问应用程序

   

三、使用K8s进行自动化部署

1、使用Docker构建应用程序镜像


# 在应用程序根目录下创建一个名为 Dockerfile 的文件
# 编写Dockerfile,示例:
FROM node:12.13.0-alpine

WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]

# 构建镜像
docker build -t myapp:v1 .

2、使用Kubectl进行部署


# 创建一个Deployment
kubectl create deployment myapp --image=myapp:v1 --replicas=3
# 创建一个Service
kubectl expose deployment myapp --type=LoadBalancer --port=80

3、使用Helm进行自动化部署


# 安装Helm
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
# 添加一个Helm仓库
helm repo add stable https://charts.helm.sh/stable
# 安装一个Chart
helm install myapp stable/mysql

四、K8s的高级特性

1、自动伸缩

K8s可以根据资源利用率自动伸缩应用程序,让我们无需手动调整容器的数量。


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:v1
        ports:
        - containerPort: 80
      resources:
        requests:
          cpu: 100m
          memory: 100Mi
        limits:
          cpu: 500m
          memory: 500Mi
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

2、服务发现和负载均衡

K8s可以自动发现容器,并且提供了负载均衡功能,让我们轻松地访问容器化的应用程序。


apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  ports:
  - name: http
    port: 80
    targetPort: 80
  selector:
    app: myapp
  type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
spec:
  backend:
    serviceName: myapp
    servicePort: 80

3、配置管理

K8s可以帮助我们轻松地管理应用程序的配置文件,让我们可以快速地更改应用程序的配置。


apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp-config
data:
  DB_HOST: mydb
  DB_USER: user
  DB_PASSWORD: password
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  containers:
  - name: myapp
    image: myapp:v1
    envFrom:
    - configMapRef:
        name: myapp-config

五、总结

K8s是一个功能强大、灵活性高的容器编排平台,在大规模容器化应用程序的部署和管理方面有着重要的作用。本文通过从容器和K8s、K8s快速入门、自动化部署、K8s的高级特性等几个方面详细阐述了K8s的相关知识,并给出了相应的代码示例,相信读者可以更加深入地了解K8s,并将其应用到实际的开发工作中。