Cloud Native 35 min read

Master Kubernetes Basics: From Pods to Deployments and kubectl

This comprehensive guide walks beginners through Kubernetes fundamentals, explaining the architecture, core objects such as Pods, Deployments, Services, and Ingress, and provides step‑by‑step instructions for configuring kubectl, deploying resources, managing updates, and troubleshooting common issues.

Open Source Linux
Open Source Linux
Open Source Linux
Master Kubernetes Basics: From Pods to Deployments and kubectl

写在前面

作者在2022年9月从端侧开发转到后台开发,首次项目强依赖K8S,发现很多入门文章不友好,于是决定写一系列文章帮助新手快速了解K8S的概念、架构和使用。

本文组织方式:

K8S是什么以及其作用和目的,涉及K8S架构、Master和Node之间的关系以及API Server、Scheduler、Controller、etcd等关键组件。

K8S的重要概念,包括Pod、Deployment、Service等API对象。

如何配置kubectl,介绍kubectl工具和配置办法。

如何用kubectl部署服务。

如何用kubectl查看、更新/编辑、删除服务。

如何用kubectl排查部署在K8S集群上的服务出现的问题。

I. K8S概览

1.1 K8S是什么?

Kubernetes is an open source system for managing containerized applications across multiple hosts. It provides basic mechanisms for deployment, maintenance, and scaling of applications.

K8S负责自动化运维管理多个Docker(容器化)程序的集群。

1.2 为什么是K8S?

传统部署方式需要人工介入扩容、更新,K8S可以自动完成服务的部署、更新、卸载和扩容。

1.3 K8S怎么做?

K8S采用主从模型(Master‑Node),Master节点负责调度、管理,Worker节点运行用户容器。

Master节点主要组件:

API Server :请求入口服务。

Scheduler :调度器。

Controller Manager :监控器。

etcd :存储服务。

Worker节点主要组件:

Kubelet :节点监视器。

Kube‑Proxy :网络代理。

Container Runtime :容器运行时(如Docker)。

Logging Layer :监控状态收集器。

Add‑Ons :插件机制。

II. K8S重要概念

2.1 Pod实例

Pod 是Kubernetes中可以创建和管理的最小可部署计算单元。

Pod是一组共享网络、存储和计算资源的容器集合,同一Pod内的容器可以通过localhost互相访问并共享卷。

下面是一个最简单的Pod yaml示例:

apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-ctr
    image: polinux/stress
    resources:
      limits:
        memory: "200Mi"
      requests:
        memory: "100Mi"
    command: ["stress"]
    args: ["--vm","1","--vm-bytes","150M","--vm-hang","1"]
    volumeMounts:
    - name: redis-storage
      mountPath: /data/redis
  volumes:
  - name: redis-storage
    emptyDir: {}

关键字段解释: apiVersion :API版本。 kind :对象类型。 metadata :名称和命名空间。 spec :容器列表、资源限制、启动命令、卷挂载等。

2.2 Volume数据卷

Volume是Pod内部的磁盘资源,必须通过 volumeMounts 在容器中挂载后才能使用。

2.3 Container容器

Pod可以包含多个容器,常见类型有Standard、Init、Sidecar、Ephemeral。

2.4 Deployment和ReplicaSet

Deployment控制器为Pods和ReplicaSets提供声明式的更新能力。

Deployment负责管理Pod的期望副本数,自动创建或删除ReplicaSet。

ReplicaSet的目的是维护一组始终运行的Pod副本。

ReplicaSet受Deployment控制。

2.5 Service和Ingress

Service将一组Pods公开为网络服务,提供负载均衡和统一的DNS名称。

Ingress是集群外部访问Service的入口,支持负载均衡、SSL终止和基于名称的虚拟托管。

2.6 Namespace命名空间

Kubernetes支持多个虚拟集群,这些虚拟集群称为Namespace。

Namespace用于在同一物理集群中划分资源隔离的逻辑域。

III. 配置kubectl

3.1 什么是kubectl?

Kubectl是一个命令行接口,用于对Kubernetes集群运行命令。

基本语法:

kubectl [command] [TYPE] [NAME] [flags]

3.2 怎么配置kubectl?

配置文件示例(简化):

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: thisisfakecertifcateauthoritydata00000000000
    server: https://1.2.3.4:1234
  name: cls-dev
contexts:
- context:
    cluster: cls-dev
    user: kubernetes-admin
  name: kubernetes-admin@test
current-context: kubernetes-admin@test
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    token: thisisfaketoken00000

配置方式:

使用 --kubeconfig 参数指定配置文件。

设置 KUBECONFIG 环境变量。

将配置文件放入 $HOME/.kube/config 并使用 kubectl config view --flatten 合并。

常用命令: kubectl config get-contexts :列出所有上下文。 kubectl config current-context :查看当前上下文。 kubectl config use-context ${CONTEXT_NAME} :切换上下文。

kubectl config set-context ${CONTEXT_NAME} --cluster=${CLUSTER} --user=${USER} --namespace=${NS}

:修改上下文。

IV. kubectl部署服务

4.1 如何部署Pod?

步骤:

准备Pod的yaml文件(如上示例)。

执行 kubectl create -f ${POD_YAML}kubectl apply -f ${POD_YAML}

如果yaml有错误,kubectl会提示具体行号。

4.2 如何部署Deployment?

Deployment yaml示例:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: rss-site
  namespace: mem-example
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: memory-demo-ctr
        image: polinux/stress
        resources:
          limits:
            memory: "200Mi"
          requests:
            memory: "100Mi"
        command: ["stress"]
        args: ["--vm","1","--vm-bytes","150M","--vm-hang","1"]
        volumeMounts:
        - name: redis-storage
          mountPath: /data/redis
      volumes:
      - name: redis-storage
        emptyDir: {}

使用 kubectl create -f ${DEPLOYMENT_YAML}kubectl apply -f ${DEPLOYMENT_YAML} 部署,K8S会自动创建对应的ReplicaSet和Pod。

V. kubectl查看、更新/编辑、删除服务

5.1 如何查看服务?

基本命令:

kubectl get|describe ${RESOURCE} [-o ${FORMAT}] -n ${NAMESPACE}
# RESOURCE: pod、deployment、replicaset 等

列出所有命名空间的Pod: kubectl get pod --all-namespaces

5.2 如何更新/编辑服务?

方法一:修改yaml后使用 kubectl apply -f ${YAML}

方法二:直接编辑资源: kubectl edit ${RESOURCE} ${NAME}

注意只能修改镜像、容器等少数字段,其他字段需要删除后重新创建。

5.3 如何删除服务?

删除Pod: kubectl delete pod ${NAME}

删除Deployment: kubectl delete deployment ${NAME} ,随后相关Pod会被自动清理。

强制删除: kubectl delete pod --force --grace-period=0 ${NAME}

VI. kubectl排查服务问题

6.1 部署失败排查

使用 kubectl describe pod ${POD_NAME} 查看Events日志,定位镜像拉取、资源不足等错误。

6.2 运行异常排查

查看容器日志: kubectl logs ${POD_NAME} -c ${CONTAINER_NAME}

进入容器交互式调试: kubectl exec -it ${POD_NAME} -c ${CONTAINER_NAME} -- /bin/sh

写在后面

本文旨在帮助对K8S不熟悉的新手快速入门,作者在撰写过程中体会到K8S架构的完备与设计的精妙,值得深入研究。

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

Cloud NativeDeploymentKubernetesk8sPodkubectl
Open Source Linux
Written by

Open Source Linux

Focused on sharing Linux/Unix content, covering fundamentals, system development, network programming, automation/operations, cloud computing, and related professional knowledge.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.