1、初步掌握
kubernetes
参考文档:
https://www.kubernetes.org.cn/7315.html
https://zhuanlan.zhihu.com/p/410371256
最终完成搭建参考文档: https://zhuanlan.zhihu.com/p/410371256
问题解决:
只能通过部署pod的node节点+端口号,才能访问,并且clusterIP无法访问
# 解决方案
"""
三台服务器都配置了三条规则
iptables -t nat -A OUTPUT -d 10.0.4.8 -j DNAT --to-destination 101.35.241.220
iptables -t nat -A OUTPUT -d 10.0.4.16 -j DNAT --to-destination 150.158.153.179
iptables -t nat -A OUTPUT -d 10.0.8.15 -j DNAT --to-destination 42.194.147.234
在每一个节点上,都执行这三条规则
# 最终执行一下
iptables -P FORWARD ACCEPT
"""
知识图谱
核心概念
- Pod
- Controller
- Service
- Ingress
RABC Helm Yaml 持久化存储
K8S概述
- 使用K8S进行容器化应用部署
- 使用K8S利于应用扩展
- K8S目标实施让部署容器化应用更加简洁和高效
K8S特性
- 自动装箱
- 自我修复
- 当有一个节点挂掉,K8S将应用转移到第二节点继续执行,并且只有第二节点各项都启动成功才会对外服务,
- 水平扩展
- 增加或减少部署的节点
- 负载均衡
- 滚动更新
- 增加三个节点,会一个一个对节点进行检测,然后才会对外服务
- 版本更新
- 回滚等
- 密钥配置
- 存储编排
- 批处理
K8S集群架构组件
- master(主控节点) 和 node(工作节点)
- controller-manager:假如需要部署一个订单应用,通过
scheudler
找到node
节点进行部署, 此时controller-manager
会创建一个controller对应订单应用,并进行一对一的管理。此时在来一个购物车应用,同样也会新建一个controller
对购物车应用进行一对一管理 - kubelet:
master
派遣到node
节点的代表,监控node
节点的状态,并进行管理 - kube-proxy:实现网络代理,负载均衡
搭建集群方式
- kubeadm
- 二进制包
kubernetes集群命令行工具kubectl
1、kubectl概述
kubectl
是 kubernetes
集群的命令行工具,通过 kubectl
能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署
2、kubectl
命令的语法
kubectl [command] [TYPE] [NAME] [flags]
-
command:指定要对资源执行的操作,列如create、get、describe 和 delete
-
TYPE:指定资源类型,资源类型是大小写敏感的,开发者能够以单数、复数和缩略的形式。列如:
kubectl get pod pod1 kubectl get pods pod1 kubectl get po pod1
-
NAME:指定资源的名称,名称也大小写敏感,如果省略名称,则会显示所有的资源
kubectl get pods
-
flags:指定可选的参数,列如,可用 -s 或者 -server参数指定kubectl API server的地址和端口
-
kubectl help
获取更多信息kubectl --help kubectl get --help
-
kubectl
子命令使用分类(command)-
基本命令
-
基本命令 create 通过文件名或标准输入创建资源 expose 将一个资源公开为一个新的service run 在集群中运行一个特定的镜像 set 在对象上设置特定的功能 get 显示一个或多个资源 explain 文档参考资料 edit 使用默认的编辑器编辑一个资源 delete 通过文件名、标准输入、资源名称或标签选择器来删除资源
-
-
部署和集群管理命令
-
部署命令 rollout 管理资源的发布 rolling-update 对给定的复制控制器滚动更新 scale 扩容或缩容pod数量,Development、ReplicaSet、RC或Job autoscale 创建一个自定选择扩容或缩容并设置pod数量 集群管理命令 certificate 修改证书资源 cluster-info 显示集群信息 top 显示资源(CPU/Memory/Storage)使用,需要Heapster运行 cordon 标记节点不可调度 uncordon 标记节点可调度 drain 驱逐节点上的应用,准备下线维护 taint 修改节点taint标记 -
故障诊断和调试命令
-
故障诊断和调试命令 describe 显示特定资源或资源组的详细信息 logs 在一个pod中打印一个容器日志,如果pod只有一个容器,容器名称是可选的 attach 附加到一个运行的容器 exec 执行命令到容器 port-torward 转发一个或多个本地端口到一个pod proxy 运行一个proxy到kubernetes API server cp 拷贝文件或目录到容器中 auth 检查授权
-
-
其他命令
-
高级命令 apply 通过文件名或标准输入对资源应用配置 patch 使用补丁修改、更新资源的字段 replace 通过文件名或标准输入替换一个资源 convert 不同的API版本之间转换配置文件 设置命令 label 更新资源上的标签 annotate 更新资源上的注释 completion 用于实现kubectl工具自动补全 其他命令 api-versions 打印收支持的API版本 config 修改kubeconfig文件(用于访问API,比如配置认证信息) help 所有命令帮助 plugin 运行 一个命令行插件 version 打印客户端和服务版本信息
-
-
-
YAML文件概述
k8s集群中对资源管理和资源对象编排部署都可以通过样式(YAML)文件来解决,
YAML文件书写格式
-
YAML介绍
- 标记语言,以数据为中心,可读性高,变大数据序列的格式
-
YAML基本语法
- 使用空格作为缩进
- 缩进的空格数目不重要,只有相同层级的元素左侧对齐即可
- 低版本缩进时不允许使用Tab键,只允许使用空格
- 使用 # 标识注释,从这个字符一直到行尾,都会被解释器忽略
- 使用 --- 表示 新的yaml文件开始
-
yaml文件组成部分
- 控制器定义(到template之前)
- 被控制对象(template之后)
如何快速编写yaml文件
-
使用kubectl create 命令快速生成yaml文件,在进行修改(适用于为部署的项目)
-
kubectl create deployment web --image=nginx -o yaml --dry-run > m1.yaml """ 参数详解 --image=nginx:指定一个镜像 -o yaml:不真正创建一个资源而是生成一个yaml文件 --dry-run:尝试运行,不是真的执行 > m1.yaml:输出生成的yaml """
-
-
使用kubectl get 命令导出yaml文件(适用于已经部署好的项目)
-
kubectl get deploy # 显示deploy资源 kubectl get deploy nginx -o=yaml [--export] > m2.yaml # 将相关内容导出为yaml文件
Pod概述
基本概念
- 最小的部署单元
- k8s不是直接处理容器,而是处理pod。pod由一个或多个container组成,
- 一个pod中的容器共享网络命名空间
- pod是短暂的(重启ip就会变化)
pod的意义
- 创建容器使用docker,一个docker对应一个容器,一个容器有进程,一个容器运行一个应用程序
- Pod是多进程设计,可以运行多个容器
- 一个pod有多个容器,一个容器里面运行一个应用程序
- Pod存在 为了亲密性应用
- 两个应用之间进行交互
- 网络之间进行调用
- 两个应用需要频繁调用
Pod实现机制
- 共享网络
- 容器存在于同一个
namespace
下面 - 通过
Pause
容器,把其他业务容器加入到Pause
容器里面,让所有的容器在同一个命名空间中,实现网络共享
- 容器存在于同一个
- 共享存储
- 引入数据卷(volumn),使用数据卷进行持久化存储
镜像拉取策略
Pod资源限制
# 创建一个deployment
# mysql-deploy.yaml
apiVersion: apps/v1 #API版本
kind: Deployment # 副本控制器RC
metadata:
labels: # 标签
app: mysql
name: mysql # 对象名称,全局唯一
spec:
replicas: 1 # 预期的副本数量
selector:
matchLabels:
app: mysql
template: # pod模板
metadata:
labels:
app: mysql
spec:
containers: # 定义容器
- image: mysql:5.7
name: mysql
ports:
- containerPort: 3306 # 容器应用监听的端口号
env: # 注入容器中的环境变量
- name: MYSQL_ROOT_PASSWORD
value: "123456"
# 创建pod
kubectl apply -f mysql-deploy.yaml
# 查看刚刚创建的deployment
kubectl get deploy
# 查看pod的创建情况
kubectl get pods
# 创建一个与pods关联的service
# mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
# 创建service
"""
metadata.name: Service对外的服务名
spec.ports: 虚端口
spec.selector: 确定了哪些Pod副本(实例)对应本服务
"""
kubectl create -f mysql-svc.yaml
# 查看刚刚创建的Service对象
kubectl get svc [mysql]
本文来自博客园,作者:暮歌行,转载请注明原文链接:https://www.cnblogs.com/xuejian123/p/17204075.html