0%

k8s 基础入门

Kubernetes(简称 K8s)是一款开源平台,用于自动化容器化应用的部署、扩展和管理。它可以帮助我们管理大规模的容器集群,优化资源的分配,并实现自动化的监控和弹性伸缩。下面是常用的一些命令,以及如何在 K8s 上部署应用的一些实践。

基本概念

在开始之前,我们来了解一下 Kubernetes 的一些基本概念:

  • Pod:Kubernetes 中最小的可部署单元,一个 Pod 可以包含一个或多个容器。Pod 内的容器共享相同的网络、存储卷和调度策略。通常,一个 Pod 用于运行一个应用实例。
  • Deployment:一种管理 Pod 副本的控制器,它确保指定数量的 Pod 副本在集群中始终处于运行状态。你可以通过 Deployment 轻松地进行应用的滚动更新和版本回滚。
  • Service:一种抽象,允许你通过固定的 IP 地址和端口访问一组 Pod。它为 Pod 提供了一个稳定的入口点,并负责将请求负载均衡到不同的 Pod。
  • ReplicaSet:负责维护一组指定数量的 Pod 副本。通常通过 Deployment 创建和管理 ReplicaSet,确保指定数量的 Pod 副本始终在集群中运行。
  • Namespace:Kubernetes 中的虚拟集群,用于将集群资源进行逻辑隔离。可以通过 Namespace 来管理不同环境(如开发、测试和生产环境)的资源。
  • Node:Kubernetes 集群中的工作机器,负责运行 Pod;每个 Node 都包含一个 Kubelet(管理 Pod 和容器的代理)和一个容器运行时(如 Docker)。

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看 Kubectl 版本
kubectl version
# 查看集群信息
kubectl cluster-info
# 查看部署的应用
kubectl get deployments
kubectl get rs
# 扩容到 2 个实例
kubectl scale deployments/kubernetes-nginx --replicas=2
# 查看所有 pod
kubectl get pods -o wide
# 查看镜像版本号
kubectl describe pods |grep Image
# 镜像回滚更新
kubectl set image deployments/kubernetes-nginx nginx=nginx:1.19
# 版本回滚
kubectl rollout undo deployments/kubernetes-nginx

一般情况下,我们会安装 Kuboard 等一些可视化的管理界面,这样可以简化我们的一些操作,避免登录服务器在输入相关命令去执行。

应用的部署

K8s 是通过创建相关的配置文件来描述部署应用的相关信息,如:从哪里拉取应用的镜像、需要部署几个节点、应用在集群当中的标记是什么等。下面是一个示例配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
apiVersion: apps/v1
kind: Deployment
metadata:
name: PROJECT_NAME-deployment
labels:
app: PROJECT_NAME
spec:
replicas: 2
# 定义如何查找要管理的Pod
selector:
matchLabels:
app: PROJECT_NAME
template:
metadata:
labels:
app: PROJECT_NAME
spec:
containers:
- name: PROJECT_NAME
# 指定容器镜像,K8s 会根据地址去拉取镜像
image: xxxx
# 指定开放的端口
ports:
- containerPort: CONTAINER_PORT

---

apiVersion: v1
kind: Service
metadata:
name: PROJECT_NAME-service
spec:
type: NodePort
selector:
app: PROJECT_NAME
ports:
- name: http
protocol: TCP
port: CONTAINER_PORT
targetPort: CONTAINER_PORT
# Node上的静态端口
nodePort: NODE_PORT

最后可以通过 kubectl apply -f xxx.yaml 来启动我们的应用;此外,也可以结合 Jenkins 进行自动化部署。

参考