k8s搭建一个lnmp本地环境的完整过程

07/29 16:45
阅读数 461

1.安装k8s

本机使用了Mac下的Docker Desktop下的k8s环境。
k8s镜像国内下载:Docker Desktop for Mac/Windows 开启 Kubernetes

Dashboard登录Token过期时间修改

本地测试TOKEN是不是经常过期?在构建文件recommended.yaml的–namespace=kubernetes-dashboard下增加一行ttl即可。
在这里插入图片描述
已经启动了怎么办?修改已经启动yaml文件,大概在143行下新增ttl。

kubectl edit deployment -n kubernetes-dashboard

2.基本概念介绍

1.架构核心组件了解

k8s使用类似master/node(cluster)的模型,由客户端发送请求给master的api server,master的api server收到请求后查询ETCD的变动,ETCD进行Controller Manager和Scheduler内部调度后返回给api server,最后转发给对应的node去执行。
在这里插入图片描述
图片来源B站UP主:free-coder的【kubernetes入门】快速了解和上手容器编排工具k8s



客户端请求方式 描述
kubectl 命令行工具
webUI 通过Dashboard操作发出请求
RestAPI 自定义,可以给webUI增加功能。
master组件 描述
api server 资源操作的唯一入口,提供认证、授权、访问控制、API 注册和发现等机制。
ETCD 保存整个集群的状态,Raft分布式的kv数据库
Controller Manager 资源控制中心,维护集群的状态,比如故障检测、自动扩展、滚动更新等
Scheduler 调度的主要实施者,按照预定的调度策略将 Pod 调度到相应的机器上
node组件 描述
kubelet 维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理
kube-proxy 为 Service 提供 cluster 内部的服务发现和负载均衡
container runtime 镜像管理以及 Pod 和容器的真正运行(CRI ),被调度的实际容器(docker)

更多请参考Kubernetes指南 核心组件

2.资源对象了解

类型 资源名 描述
集群 Namespace 命名空间起隔离作用,初始化有default和kube-system,方便划分项目组或用户组
集群 Node Pod真正运行的主机,一定包含kubelet、kube-proxy、Container runtime
工作资源 POD 调度的基本单位,多个容器共享网络和文件系统,共享IPC、PID、network和namespace
工作资源 ReplicaSet 新一代RC(Replication Controller),保证集群中运行指定数目的Pod副本
工作资源 Deployment 部署表示用户对K8s集群的一次更新操作,声明式操作。
工作资源 StatefulSet 有状态服务集,确保pod与数据保持连续性,适合跑mysql等挂载数据的服务
工作资源 DaemonSet 后台支撑服务集,有些节点需要有些节点不需要的,存储、日志和监控等在每个节点上支撑K8s集群运行的服务。
工作资源 Job 任务,全局的工作队列,控制批处理型任务的API对象。
服务发现及均衡资源 Service 将多个pod抽象为一个ServiceIP(iptables),通过 labels 为应用提供负载均衡和服务发现,解决Pod 的 IP 地址会随着 Pod 的重启而变化的问题
服务发现及均衡资源 Ingress 路由,进入集群的请求提供路由规则的集合,给 service 提供集群外部访问的 URL、负载均衡、SSL 终止、HTTP 路由等
配置与存储 Volume 让k8s具备存储资源抽象能力,其中持久存储卷(Persistent Volume,PV)由资源提供者配置,持久存储卷声明(Persistent Volume Claim,PVC)由资源使用者根据业务申请
配置与存储 ConfigMap 用于保存配置数据的键值对,相比secret可以保存非敏感信息
配置与存储 Secret 解决了密码、token、密钥等敏感数据的配置问题,不需要暴露到镜像或pod里。

更多请参考Kubernetes指南 资源

3.lnmp构建文件介绍

github源码地址

.
├── kustomization.yaml		#整合多套生产、开发的yaml文件方便管理。
├── local-storage.yaml		#通过hostPath创建PV和PVC
├── local_storage			
│   ├── mysql				#数据持久化目录
│   └── wordpress			#应用代码持久化目录
├── mysql-deployment.yaml	#mysql的svc和Deployment管理的pod
├── nginx-deployment.yaml	#与上类似,多了ConfigMap管理配置和LoadBalancer直接暴露IP。
├── php-deployment.yaml		#与上类似
└── php-fpm					
    └── Dockerfile			#装了mysql扩展的php镜像

本地环境设置分两部分:

  1. 镜像拉去imagePullPolicy: Never ,镜像优先从本地仓库查找。
  2. PV设置hostPath的绝对路径。
  3. 同一个下PVC使用不同的目录subPath。

生成带mysql扩展的php镜像,提供给k8s使用。

docker build -t k8s-php7-fpm php-fpm/.

运行kustomization.yaml文件即可。

kubectl apply -k .    

在这里插入图片描述

4.kubectl常用命令

类似对pod命令,也对deployment、Service、PVC等资源适用,可以举一反三。

kubectl cluster-info              	#查询集群运行信息、版本。

kubectl apply -f test.yaml			#部署指定文件,--file
kubectl delete -f test.yaml			#取消部署

kubectl run d1 --image httpd:alpine --port 80      #创建d1的Apache镜像
kubectl exec -it redis-master-59694fd4d5-txcbc sh  #以sh进入容器
kubectl logs -f redis-master-59694fd4d5-txcbc 	   #查看运行时容器内的log

kubectl get - 类似于 docker ps,查询资源列表
kubectl describe - 类似于 docker inspect,获取资源的详细信息
kubectl logs - 类似于 docker logs,获取容器的日志
kubectl exec - 类似于 docker exec,在容器内执行一个命令

kubectl get pod --output=wide     #更多的pod信息
kubectl get pods  -A		      #--all-namespaces所有命名空间下的pod
kubectl describe pods			  #更详细的pods信息
kubectl get pods -w -l			  #watch命令,挂起观察
kubectl get events -A --sort-by='.metadata.creationTimestamp' #查询运行时事件倒序
kubectl expose deployment d1 --target-port 80 --type NodePort    #将d1暴露为一个svc,指定80端口和NodePort类型。


kubectl scale --replicas=3 deployment/nginx-app	#自动扩容到3个,自动加入退出service。
kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2	#滚动升级,默认,无中断服务升级
kubectl rolling-update frontend-v1 frontend-v2 --rollback #回滚
kubectl rollout status deployment/nginx-app		#查看滚动状态


for i in 0 5; do kubectl exec "web-$i" -- sh -c 'hostname'; done    #循环打印web-05容器的的hostname
for i in 0 5; do kubectl exec "web-$i" -- sh -c 'echo "$(hostname)" > /usr/share/nginx/html/index.html'; done #写入nginx hostname

5.遇到的坑

Docker Desktop for Mac : Kubernetes is starting

重写构建验证包,重启k8s,耐心等待几分钟。

rm -rf ~/Library/Group\ Containers/group.com.docker/pki/
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部