学习日志21-12-14 K8s入门 - 无状态服务
K8s入门 - 无状态服务
=====================
# 目标
- 搭建无状态服务集群
- 创建pod
- 部署应用
- 登录pod 监控应用
- 创建服务
- 监控服务等k8s资源
# 检查集群状态
## 启动minikube
- 注意MINIKUBE_HOME决定了.minikube目录的位置
- 即minikube所占用的磁盘等资源的位置
- 设置MINIKUBE_HOME=E:\minikube
`$env:MINIKUBE_HOME="E:\minikube"`
- 执行 minikube.exe start
### Q&A
- Q: 报c:/users ... 下文件已存在
- A: 环境变量没生效, 没有在E盘下创建
- 使用windows的环境变量设置语句
- 设置 如上
- 校验 直接执行 `$env:MINIKUBE_HOME`
- 结果 `E:\minikube` 表示成功
## 校验minikube 和 k8s 状态
- `.\minikube.exe version` 查看minikube的版本
- `.\minikube.exe kubectl version` 查看kubectl版本
- 可以看到两个版本号, 即Client Version 和 Server Version
- 表示k8s客户端和服务端都已经正常运行
- `.\minikube.exe kubectl cluster-info` 查看k8s集群状态
- 有两项数据 Kubernetes control plan 和 CoreDNS
- `.\minikube.exe kubectl get nodes` 获取所有nodes的信息
# 部署应用
## 创建部署
- `kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1`
- gcr.azk8s.cn/google-samples/kubernetes-bootcamp
```
gcr.io/namespace/image_name:image_tag
# 等价于
anjia0532/namespace.image_name:image_tag
k8s.gcr.io/{image}/{tag} <==> gcr.io/google-containers/{image}/{tag} <==> anjia0532/google-containers.{image}/{tag}
create deployment kubernetes-bootcamp --image=anjia0532/google-samples.kubernetes-bootcamp:v1
```
- create = 动作
- deployment = 资源类型
- kubernetes-bootcamp = 资源名 (任意)
- `--xxx` 后面的部分是参数细节
- 安装kubectl
- minikube start成功后, 会创建~/.kube/config 指示kubectl客户端如何连接到k8s集群
- minikube还操控hyper-v打通了网络 可以ping k8s集群的内部ip了
- 使用kubectl proxy 打通restful管理服务api(以下简称api)
`kubectl proxy`
- 通过api查看k8s服务信息
`http://localhost:8001/version`
- 查看pod名字
`kubectl get pods`
- 通过api查看pod信息
`http://localhost:8001/api/v1/namespaces/default/pods/kubernetes-bootcamp-57978f5f5d-k58bg`
- 看看有价值的信息有哪些
- 主要都是管理信息 涉及pod image规范
- namespace是default 有啥用?
- 删除deployment (可选 后续文档基于没有执行删除的情况)
- `delete deployment kubernetes-bootcamp`
- 还是4部分: 操作, 资源类型, 资源名, 细节参数
- 这次没有细节参数
### Q&A
- Q: 使用`.\minikube.exe kubectl xxx --xx`的命令格式
`--xx` 被识别为minikube.exe的参数 而不是kubectl的参数
- A: 虚拟机外, 本地环境安装kubectl
https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/
- Q: get deployment READY一直是0/1
- A: 通过 get pods 看到 STATUS 是 ImagePullBackOff
尝试直接下载 gcr.io/google-samples/kubernetes-bootcamp
发现使用的是 google cloud 由于某种原因网络不通
先删除deployment 之后找个网络能通的镜像源代替
- 参考 https://cloud.tencent.com/developer/article/1353088
- 镜像地址替换为 anjia0532/google-samples.kubernetes-bootcamp:v1
# 登录pod
- TODO