[部署05] Kubernetes01

180 阅读7分钟

导航

[react] Hooks

[封装01-设计模式] 设计原则 和 工厂模式(简单抽象方法) 适配器模式 装饰器模式
[封装02-设计模式] 命令模式 享元模式 组合模式 代理模式
[封装03-设计模式] Decorator 装饰器模式在前端的应用
[封装04-设计模式] Publish Subscribe 发布订阅模式在前端的应用
[封装05-ElementUI源码01] Row Col Container Header Aside Main Footer

[React 从零实践01-后台] 代码分割
[React 从零实践02-后台] 权限控制
[React 从零实践03-后台] 自定义hooks
[React 从零实践04-后台] docker-compose 部署react+egg+nginx+mysql
[React 从零实践05-后台] Gitlab-CI使用Docker自动化部署

[源码-webpack01-前置知识] AST抽象语法树
[源码-webpack02-前置知识] Tapable
[源码-webpack03] 手写webpack - compiler简单编译流程
[源码] Redux React-Redux01
[源码] axios
[源码] koa
[源码] vuex
[源码-vue01] data响应式 和 初始化渲染
[源码-vue02] computed 响应式 - 初始化,访问,更新过程
[源码-vue03] watch 侦听属性 - 初始化和更新
[源码-vue04] Vue.set 和 vm.$set
[源码-vue05] Vue.extend

[源码-vue06] Vue.nextTick 和 vm.$nextTick

[源码-react01] ReactDOM.render01
[源码-react02] 手写hook调度-useState实现

[部署01] Nginx
[部署02] Docker 部署vue项目
[部署03] gitlab-CI
[部署04] [复习] gitlabCI + docker-compose + ssh免密登录 + 最全Dockerfile [部署05] Kubernetes01

[数据结构和算法01] 二分查找和排序
[数据结构和算法02] 回文字符串
[数据结构和算法03] 栈 和 队列
[数据结构和算法04] 链表 和 树

[深入01] 执行上下文
[深入02] 原型链
[深入03] 继承
[深入04] 事件循环
[深入05] 柯里化 偏函数 函数记忆
[深入06] 隐式转换 和 运算符
[深入07] 浏览器缓存机制(http缓存机制)
[深入08] 前端安全
[深入09] 深浅拷贝
[深入10] Debounce Throttle
[深入11] 前端路由
[深入12] 前端模块化
[深入13] 观察者模式 发布订阅模式 双向数据绑定
[深入14] canvas
[深入15] webSocket
[深入16] webpack
[深入17] http 和 https
[深入18] CSS-interview
[深入19] 手写Promise
[深入20] 手写函数
[深入21] 数据结构和算法 - 二分查找和排序
[深入22] js和v8垃圾回收机制
[深入23] JS设计模式 - 代理,策略,单例
[深入24] Fiber01
[深入25] Typescript
[深入26] Drag

[前端学java01-SpringBoot实战] 环境配置和HelloWorld服务
[前端学java02-SpringBoot实战] mybatis + mysql 实现歌曲增删改查
[前端学java03-SpringBoot实战] lombok,日志,部署
[前端学java04-SpringBoot实战] 静态资源 + 拦截器 + 前后端文件上传
[前端学java05-SpringBoot实战] 常用注解 + redis实现统计功能
[前端学java06-SpringBoot实战] 注入 + Swagger2 3.0 + 单元测试JUnit5
[前端学java07-SpringBoot实战] IOC扫描器 + 事务 + Jackson
[前端学java08-SpringBoot实战总结1-7] 阶段性总结
[前端学java09-SpringBoot实战] 多模块配置 + Mybatis-plus + 单多模块打包部署
[前端学java10-SpringBoot实战] bean赋值转换 + 参数校验 + 全局异常处理
[前端学java11-SpringSecurity] 配置 + 内存 + 数据库 = 三种方式实现RBAC
[前端学java12-SpringSecurity] JWT
[前端学java13-SpringCloud] Eureka + RestTemplate + Zuul + Ribbon

复习笔记-01
复习笔记-02
复习笔记-03
复习笔记-04

前置知识

(1) 一些单词

pod 豆荚
replica 复制
deployment 部署
sphere 球 球体

kind 种类 慈祥的
ingress 进入

(一) 一些基本概念

(1) Master 节点

  • 控制节点
    • master 节点是 kubernetes 集群的 ( 控制节点 ),负责整个集群的 ( 管理和控制 )
  • 组件
    • api-server --- 提供 HTTP REST 服务,是集群控制的入口
    • scheduler ---- 负责pod的调度
    • controller --- 资源对象的控制中心

(2) Node 节点

  • 工作节点
    • Node 节点是kubernetes集群的 ( 工作节点 )
    • Node 上的 ( 工作负载 ) 由 ( master ) 分配,工作负载主要是 ( 运行容器 )
  • 组件
    • kubelet ------ 负责 ( pod ) 的 ( 创建,启动,监控,重启,销毁等 )
    • kube proxy --- 端口转发,负载均衡器,实现 ( kubernetes serverce ) 的通信和负载均衡

(3) pod

  • pod的地址是不变的
  • pod 是 kubernetes 最基本的 ( 部署调度单元 )
  • pod的组成
    • 一个 根容器
    • 一个或多个 业务容器
    • pod由一个根容器,和一个或者多个业务容器组成
  • 一个pod可以表示应用的一个实例

(4) ReplicaSet

  • ReplicaSet 是 pod 副本的抽象,用于解决pod的 ( 扩容和伸缩 )
  • replica 是复制的意思

(5) Deployment

  • 可以通过 Deployment 来生成相应的 ReplicaSet 来完成 pod副本创建

(6) Service

  • Service 定义了服务的 访问入口
  • Service 通过 Label Selector 同后端的pod副本 建立关系
  • service 是 kubernetes 重要的 资源对象

(7) etcd

  • etcd 存储kubernetes的 配置文件
  • 可以理解为k8s的 ( 数据库 - 是键值对形式的数据库 ),存储 node,pod,网络等
  • 扩展:etc/ 文件夹 ----- linux中的etc一般都是配置文件的地方

(8) k8s的整体运行机制

2768057195-11d9052f3f64ebcf.webp image.png image.png

(二) 腾讯云安装k8s

1. 容器服务
2. 集群 - 使用模版新建 - 标准托管集群 - 创建集群
   - 运行时组件:选择docker
   - 操作心痛:选择CentOS7.6
3. 安装下图示例安装

注意点:记得学习完成后删除集群,不然可能会持续扣钱

image.png image.png image.png image.png image.png image.png

(三) 安装 kubeSphere

  • sphere 是球,球体的意思
1. 通过ssh方式登录节点
- 问题:节点在什么地方查看?
- 回答:在通讯云的 - 节点管理 - 节点中查看
- 注意:任意一个节点的 ( 公网ip ) 登录即可

2. 安装kubeSpyere
- 注意 ( https://github.com ) 一般会很慢,可以换成 ( https://hub.fastgit.org )
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/kubesphere-installer.yaml
或者 
kubectl apply -f https://hub.fastgit.org/kubesphere/ks-installer/releases/download/v3.2.1/kubesphere-installer.yaml

3. 下载集群配置
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/cluster-configuration.yaml

4. 查看所有 Pod 在 KubeSphere 相关的命名空间是否正常运行
kubectl get pod --all-namespaces

5. 检查控制台的端口(默认为 30880)
kubectl get svc/ks-console -n kubesphere-system

6. 打开cubeSphere控制台web
- 控制台网址:node节点服务器的公网ip + 30880
- 默认用户名/密码:admin/P@88w0rd

8. kubeSphere官网
https://kubesphere.io/zh/docs/installing-on-kubernetes/introduction/overview/

image.png

image.png

image.png

(四) kubernetes 常用命令

(1) kubectl

  • kubectl [command] [TYPE] [NAME] [flags]
  • command 对资源执行的操作 - 比如:create get describe delete
  • type 表示:资源类型
  • name 表示:资源名称
  • flags 表示:可选参数
1. 显示所有资源的详细信息
kubectl get pods ----------------------- 获取pods
kubectl get pods --all-namespaces ------ 获取所有命名空间

2. 创建名为app-pod的pod
- 命令行方式创建pod
  - kubectl run app-pod --image=nginx ----- 创建pod;pod的名字是app-pod;使用的镜像是nginx
  - kubectl get pod -o wide --------------- 查看pod 的详细信息
- yaml方式创建pod
  - 1. 创建一个xxx.yaml
  - 2. 进入到 xxx.yaml 文件所在的文件夹,执行以下命令
  - 3. 执行命令:kubectl apply -f ./xxx.yaml


3. 获取所有nodes
kubectl get nodes

4. 创建一个deployment 
kubectl create deployment nginx --image=node

5. 查看deployment
kubectl get deployment
// 或者 kubectl get deploy

6. 建一个 service 来让外界能够访问到我们 nginx 服务
kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort

7. 查看 service 信息
kubectl get svc 
// svc 是 service 的缩写
 
6. 访问service
node的ip + NodePort
pod相关
---

kubectl get pod -o wide ------------- 查看所有pod
kubectl describe pod pod名称 -------- 查看pod的详细数据
kubectl logs pod名称 ---------------- 查看pod的日志
kubectl logs pod名称 -f ------------- 持续不断的查看pod的日志
kubectl exec -it pod名称 ------------ 进入pod中的容器
kubectl exec -it pod名称 -c 容器名 --- 进入pod中的具体的某一个容器,-c后面跟容器名

kubectl port-forward pod名称 服务端口:容器中的端口 ---- 让外部访问到pod,即 ( ip+服务端口 ) 来访问

(五) 如何编写 pod.yaml 文件

apiVersion ---------- 版本号,必填
kind ---------------- 表示资源类型,kind的英语意思是类型,必填;注意:Pod首字母大写
metadata ------------ 元数据,必填
  name -------------- pod名称
  namespace --------- Pod所属的命名空间,默认为"default"
spec ---------------- pod中元素的详细定义,必填
  containers ---------- pod中容器列表,必填
---

apiVersion: v1 #必选,版本号,例如v1
kind: Pod #资源类型,例如 Pod,Deployment,ReplicaSet,Replication
metadata: # 元数据
  name: test-pod #pod名称
spec: #必选,Pod中容器的详细定义
  containers: # 定义容器,可以多个
    - name: test-k8s # 容器名字
      image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 # 镜像

(六) Service

(1) Service的特点

  • Service通过 ( label ) 关联对应的pod
  • Service生命周期不跟pod绑定,不会因为pod重新改变ip
  • 提供了负载均衡功能,自动转发流量到不同的pod
  • 集群内可以通过服务名称访问

image.png

资料