# 一.常见命令

# 1.kubectl 命令

kubectl 是 kubernetes 集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。kubectl 命令的语法如下:

kubectl [command] [type] [name] [flags]
1
  • comand:指定要对资源执行的操作,例如 create、get、delete
  • type:指定资源类型,比如 deployment、pod、service
  • name:指定资源的名称,名称大小写敏感
  • flags:指定额外的可选参数

例如:

# 查看所有pod
kubectl get pod

# 查看某个pod
kubectl get pod pod_name

# 查看某个pod,以yaml格式展示结果
kubectl get pod pod_name -o yaml
1
2
3
4
5
6
7
8

# 2.资源类型

kubernetes 中所有的内容都抽象为资源,可以通过下面的命令进行查看:

kubectl api-resources
1

经常使用的资源有下面这些:

资源分类 资源名称 缩写 资源作用
集群级别资源 nodes no 集群组成部分
namespaces ns 隔离 Pod
pod 资源 pods po 装载容器
pod 资源控制器 replicationcontrollers rc 控制 pod 资源
replicasets rs 控制 pod 资源
deployments deploy 控制 pod 资源
daemonsets ds 控制 pod 资源
jobs 控制 pod 资源
cronjobs cj 控制 pod 资源
horizontalpodautoscalers hpa 控制 pod 资源
statefulsets sts 控制 pod 资源
服务发现资源 services svc 统一 pod 对外接口
ingress ing 统一 pod 对外接口
存储资源 volumeattachments 存储
persistentvolumes pv 存储
persistentvolumeclaims pvc 存储
配置资源 configmaps cm 配置
secrets 配置

# 3.操作类型

kubernetes 允许对资源进行多种操作,可以通过--help 查看详细的操作命令

kubectl --help
1

经常使用的操作有下面这些:

命令分类 命令 翻译 命令作用
基本命令 create 创建 创建一个资源
edit 编辑 编辑一个资源
get 获取 获取一个资源
patch 更新 更新一个资源
delete 删除 删除一个资源
explain 解释 展示资源文档
运行和调试 run 运行 在集群中运行一个指定的镜像
expose 暴露 暴露资源为 Service
describe 描述 显示资源内部信息
logs 日志 输出容器在 pod 中的日志
attach 缠绕 进入运行中的容器
exec 执行 执行容器中的一个命令
cp 复制 在 Pod 内外复制文件
rollout 首次展示 管理资源的发布
scale 规模 扩(缩)容 Pod 的数量
autoscale 自动调整 自动调整 Pod 的数量
高级命令 apply rc 通过文件对资源进行配置
label 标签 更新资源上的标签
其他命令 cluster-info 集群信息 显示集群信息
version 版本 显示当前 Server 和 Client 的版本

# 4.命令式对象配置

命令式对象配置就是使用命令配合配置文件一起来操作 kubernetes 资源。

1.创建一个 nginxpod.yaml,内容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: dev

---
apiVersion: v1
kind: Pod
metadata:
  name: nginxpod
  namespace: dev
spec:
  containers:
    - name: nginx-containers
      image: nginx:latest
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

2.执行 create 命令,创建资源

[root@master ~]# kubectl create -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
1
2
3

此时发现创建了两个资源对象,分别是 namespace 和 pod

3.执行 get 命令,查看资源:

[root@master ~]#  kubectl get -f nginxpod.yaml
NAME            STATUS   AGE
namespace/dev   Active   18s

NAME            READY   STATUS    RESTARTS   AGE
pod/nginxpod    1/1     Running   0          17s
1
2
3
4
5
6

这样就显示了两个资源对象的信息

4.执行 delete 命令,删除资源:

[root@master ~]# kubectl delete -f nginxpod.yaml
namespace "dev" deleted
pod "nginxpod" deleted
1
2
3

# 5.声明式对象配置

声明式对象配置跟命令式对象配置很相似,但是它只有一个命令apply

# 首先执行一次kubectl apply -f yaml文件,发现创建了资源
[root@master ~]#  kubectl apply -f nginxpod.yaml
namespace/dev created
pod/nginxpod created

# 再次执行一次kubectl apply -f yaml文件,发现说资源没有变动
[root@master ~]#  kubectl apply -f nginxpod.yaml
namespace/dev unchanged
pod/nginxpod unchanged
1
2
3
4
5
6
7
8
9

总结:其实声明式对象配置就是使用 apply 描述一个资源最终的状态(在 yaml 中定义状态)

使用 apply 操作资源:

  • 如果资源不存在,就创建,相当于 kubectl create
  • 如果资源已存在,就更新,相当于 kubectl patch

# 二.Pod 命令

一定要加上命令空间

# 1.执行文件

#删除pod和services
kubectl delete -f  h2o.yaml

#通过yaml部署
kubectl apply -f h2o.yaml

#使用命令创建
kubectl create deployment my-nginx --image nginx:latest
1
2
3
4
5
6
7
8

# 2.获取全部信息

#查询所有节点详情
kubectl get all -n h2o-statefulset

#查看pods和svc详情
kubectl get pod,svc  -o wide -n h2o-statefulset
1
2
3
4
5

# 3.获取 pod 信息

#查看pods
kubectl get pods -n h2o-statefulset

#查看详情
kubectl describe pod  -n h2o-statefulset

#查询pod的ip和port
kubectl get pods -o wide  -n h2o-statefulset
1
2
3
4
5
6
7
8

# 4.获取 service 信息

#查看services
kubectl get services  -n h2o-statefulset

#查询服务详情
kubectl describe service/h2o-service  -n h2o-statefulset

#查询services
kubectl get services  -n default
1
2
3
4
5
6
7
8

# 5.删除部署

kubectl delete -f  h2o.yaml

或者

#删除命名空间
kubectl delete statefulset.apps/h2o-stateful-set  -n h2o-statefulset

#删除services
kubectl delete service/h2o-service  -n h2o-statefulset
1
2
3
4
5
6
7
8
9

# 6.查看 controller

#查看statefulsets状态
kubectl get statefulsets -n h2o-statefulset

#查看所有deployment
kubectl get deployment
1
2
3
4
5

# 7.进入容器内部

#进入容器内部
kubectl exec -it h2o-stateful-set-0 -n h2o-statefulset  --/bin/bash

#进入容器内部
kubectl exec -ti h2o-stateful-set-0  -n h2o-statefulset     -- /bin/sh
1
2
3
4
5

# 8.查看节点日志

kubectl  logs -f -n h2o-statefulset h2o-stateful-set-0
1

# 9.查询服务域名能否可用

#查询映射服务
nslookup myservice

#查询服务域名
nslookup h2o-service.h2o-statefulset.svc.cluster.local
1
2
3
4
5

# 10.查询命名空间

#查询所有命名空间
kubectl get namespace

#查看k8s上所有的namespace
kubectl get ns

#创建新的namespace "pingpang
kubectl create ns pingpang
1
2
3
4
5
6
7
8

# 11.修改副本数量

 #将副本数修改为3个
kubectl scale deployments/my-nginx --replicas=3

#扩容
kubectl scale sts web --replicas=4 -n nginx-ss

#缩容
kubectl scale sts web --replicas=2 -n nginx-ss
1
2
3
4
5
6
7
8

# 三.原理

# 1.重要概念

Cluster——是计算、存储和网络资源的集合

Master——Cluster的大脑,决定将应用放在哪里运行

Node——职责是运行容器应用

Pod——k8s的最小工作单元,包含1orN个容器。

Controller——k8s通过它来管理Pod
	包含:Deployment、ReplicaSet、DaemonSet、StatefulSet、Job

Service——为Pod提供了负载均衡、固定的IP和Port

Namespace——解决同一个Cluster中,如何区别分开Controller、Pod等资源的问题

Kubernetes的系统组件都被放到kube-system的namespace中。

kubelet是唯一没有以容器形式运行的Kubernetes组件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 2.工作流程

 当我们执行部署应用并指定两个副本的时候,执行流程如下所示:
1> Kuberctl发送部署请求到API Server。
2> API Server通知Controller Manager创建一个deployment资源。
3> Scheduler执行调度任务,将两个副本Pod分发到node1和node2上。
4> node1和node2上的kubectl在各自的节点上创建并运行Pod。
1
2
3
4
5

image-20210919161606386

image-20210919161811067

# 3.k8s 容器

K8s(Kubernetes)是一个开源的容器编排和管理平台,用于自动化部署、扩展和管理容器化应用程序。它最初是由 Google 开发,并于后来捐赠给了 Cloud Native Computing Foundation(CNCF)。

容器是一种轻量级虚拟化技术,它将应用程序及其所有依赖项(如代码、运行时、系统工具、系统库等)打包在一起,以确保在不同环境中始终具有相同的运行行为。这使得应用程序在不同的计算机、开发和生产环境中更易于部署、迁移和管理。

Kubernetes 通过提供以下功能来简化容器化应用程序的管理:

  1. 自动化容器部署和伸缩: Kubernetes 可以自动部署和管理容器化应用程序,根据应用程序的需求自动伸缩容器数量。

  2. 自动负载均衡: Kubernetes 可以自动将流量分配到不同的容器实例,以确保应用程序的可用性和性能。

  3. 自动容器配置: Kubernetes 可以自动管理容器的配置,包括环境变量、存储卷等。

  4. 存储编排: Kubernetes 可以管理应用程序所需的存储卷,并将其附加到容器中。

  5. 自动容器恢复: 如果容器失败,Kubernetes 可以自动重新启动或替换它,以确保应用程序的健壮性。

  6. 自动滚动更新: Kubernetes 支持无宕机的应用程序更新,可以逐步将新版本的容器替换为旧版本,以避免中断。

  7. 密钥和配置管理: Kubernetes 提供机制来管理应用程序的敏感信息和配置,例如密钥、密码和 API 令牌。

  8. 批处理和定时任务: Kubernetes 支持批处理作业和定时任务,使用户能够按计划运行任务。

  9. 多环境支持: Kubernetes 支持多种云平台和本地环境,使应用程序能够在不同的部署环境中运行。

  10. 可扩展性: Kubernetes 的架构允许用户根据需要自定义和扩展系统功能。

  11. 自动升级和回滚: Kubernetes 支持集群的升级和回滚操作,以便及时应用安全补丁或版本更新。

Kubernetes 使用一组核心概念,如 Pod、Service、Deployment、StatefulSet、ConfigMap、Secret 等,来管理容器化应用程序的不同方面。开发人员和运维人员可以使用 Kubernetes 的命令行工具或 API 来操作和管理集群中的应用程序。

Kubernetes 是一个强大的容器编排和管理平台,可以大大简化容器化应用程序的部署、管理和维护过程。

# 4.滚动更新

image-20210919162606515

# 5.相关图片

image-20210915203213725

# 6.转发服务的方式

  • ClusterIP
  • NodePort
  • loadbalance
  • Ingress

# 7.k8s 中的 port

#外部机器可访问的端口
nodePort

#容器的端口(最根本的端口入口)
targetPort

#kubernetes中的服务之间访问的端口
port
1
2
3
4
5
6
7
8

# 四.安装 minikube

# 1.设置镜像

#设置阿里云镜像
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
1
2
3
4
5
6
7

# 2.安装 minikube

#安装minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
1
2
3

# 3.安装 kubectl

#安装kubectl
curl -LO https://dl.k8s.io/release/v1.20.0/bin/linux/amd64/kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
1
2
3

# 4.安装 conntrack

#安装conntrack
yum install
1
2

# 5.启动 minikube

#启动minikube
minikube start --vm-driver=none --image-mirror-country='cn'
1
2

# 6.停止 minikube

#停止minikube
minikube stop
1
2
上次更新: 11/29/2024, 10:12:16 AM