hincky的主页 hincky的主页
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)

Hincky

当有趣的人,做想做的事
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)
  • 容器技术

    • docker

      • 安装docker并换源
        • 卸载旧版本的 Docker
        • 安装依赖包
        • 添加 Docker 官方 GPG 密钥
        • 安装 Docker CE
        • 启动 Docker
        • 设置 Docker 自启动
        • 更换 Docker 镜像源为阿里云
        • 重启 Docker
        • 一体化脚本
      • docker容器内换源
        • 端口映射
        • docker容器内换源
      • 安装docker-compose
        • 下载最新版本的 Docker Compose:
        • 设置执行权限
        • 验证安装
        • 一体化脚本
      • docker-compose部署mysql主从集群
        • 创建docker-compose.yaml文件
        • 创建关键目录
        • 启动容器
        • 一体化脚本
      • dockerfile
        • 总体步骤
        • 编写Dockerfile
    • k8s

    • helm

    • rancher

    • prometheus

    • grafana

    • containerd

    • jenkins

  • 命令集合

  • 软路由

  • 容量保障技术

  • 运维
  • 容器技术
  • k8s
hincky
2022-10-12
目录

k8s概念介绍

# k8s概念

类比关系表

k8s组件 云计算系统
container 容器 进程
image 镜像 .exe安装包
kubernetes OS 操作系统
pod 虚拟机

# node

  • node节点,可以是物理机也可以是私有云公有云的虚拟机。
  • 一个node节点能运行多个pod,k8s就是将pod调度到健康的node上面运行。
  • 每个node上都有kubelet:管理node,而且是node与master通信的代理
  • 每个node上都有容器运行时docker或containerd或rkt

node节点一般分为:

  • master管理节点
  • worker工作节点

master:kube-apiserver、kube-controller-manager和kube-scheduler。负载资源管理,pod调度,弹性伸缩,安全控制,系统监控,纠错等等

worker:kubelet,kube-proxy。负责Pod的创建、启动、监控、重启、销毁,以及实现软件模式的负载均衡器。

# Deployment

用于管理pod,deployment的定义文件要有

  • 目标pod的定义
  • 目标pod要运行的副本数量replicas
  • 要监控的目标pod的标签

replicaSet:确保任何时间都有指定数量的pod运行,建议用deployment来管理rs

master通过deployment将特定副本数量应用实例调度到合适节点上运行,当节点关闭或被删除自动调度到其他节点运行实例。

kubectl create deployment kubernetes-nginx --image=nginx:1.10
1

# pod

  • 提供服务的进程,都被包装到相应的pod中,使其成为pod中运行的一个容器。
  • 每个pod都运行一个Pause的基础容器,用作共享网络和挂载卷;其他容器都以业务容器,共享pause容器的网络和挂载。

kubectl get pods
kubectl describe pods
1
2

# service

  • 唯一指定的名称(eg:mysql-server)
  • 一个虚拟IP地址(ClusterIp地址)和端口号
  • 提供远程服务能力
  • 将请求转发到一组容器应用上

service和pod的联系

  1. service对应一个或者多个pod,service定义了一组pod的逻辑集
  2. 每个pod都贴上标签Label(eg:运行php的pod标签是name=mysql)
  3. service定义标签选择器(eg:PHP service标签选择器作用与所有包含name=php的pod)
  4. 不是每个pod和它里面运行的容器都能被映射到一个service上,只有提供服务(对内对外都行)的那组pod才会被映射为一个服务。

kubectl get svc
1

# configMap

说白了就是一个资源的yaml文件

是一种API对象,用来将非机密性的数据保存到键值对中。使用时,Pod可以将其用作环境变量、命令行参数或者存储卷中的配置文件。使用ConfigMap可以将你的配置数据和应用程序代码分开。

ConfigMap允许你将配置文件与镜像文件分离,以使容器化的应用程序具有可移植性。

# k8s应用部署实践

k8s中所有的对象创建或删除都建议用配置文件的方式来设置,避免直接用命令创建或删除

mysql-deploy.yml

apiVersion: apps/v1 # API版本
kind: Deployment # 此资源对象的类型,Deployment
metadata:
  labels: # 标签
    app: mysql
  name: mysql # 对象名称,全局唯一
spec: # 此资源对象相关属性定义
  replicas: 1 # 副本数量
  selector: # pod选择器
    matchLabels: 
      app: mysql
  template: # pod模板
    metadata:
      labels: # 指定新建pod的标签,必须和上面的selector匹配
        app: mysql
    spec:
      containers: # 定义容器
      - image: mysql:5.7
        name: mysql
        port:
        - containerPort: 3306
        env:
        - name:MYSQL_ROOT_PASSWORD
          value: "123456"
          
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
kubectl apply -f mysql-deploy.yml
kubectl get deploy
kubectl get pods

# kubectl delete -f mysql-deploy.yml
1
2
3
4
5

有了deployment管理创建pod之后,要想访问到pod里面的应用。还要为pod创建对应的service,来将其ip+port暴露出来以供访问

mysql-svc.yml

apiVersion: v1 # API版本
kind: Service # 此资源对象的类型,Service
metadata:
  name: mysql # 对象名称,全局唯一
spec: # 此资源对象相关属性定义
  ports: 
    - port: 3306 # 定义了service的虚拟端口
  selector: # pod选择器
    app: mysql
1
2
3
4
5
6
7
8
9
kubectl create -f mysql-svc.yml
kubectl get svc mysql
1
2

资源整合中,敬请期待!

编辑 (opens new window)
#k8s
最近更新
01
人生前期重要的能力
05-17
02
防火墙命令
04-11
03
docker-compose部署mysql主从集群
03-22
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Hincky | MIT License | 粤ICP备2022120427号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式