随着云原生的普及,传统的fat微服务方式已经不符合日常的运营需求了,比如:业务写点业务代码,还需要配合架构升级测试验证,对业务本身是极大的影响。ServerLess应运而生,实际上就是把非业务能力剥离出来,独立运营。而现在大部分实现都依赖于容器,容器的管理主流技术是kubernetes即k8s。
开发平台可以直接安装docker desktop,服务器建议安装docker ce。
笔者的版本
使用docker desktop 安装单节点的集群kubernetes,点击apply & restart
笔者测试高版本的docker安装kubernetes失败,一直是starting,低版本可以成功安装。
这样安装,好处是一键安装,实际上云服务就是这种模式,浏览器一键申请容器,就是把很多操作封装起来,也可以使用命令一步步按照官网操作,中间会躺很多坑。
可以看到k8s是以容器方式运行的,见名知意,etcd、apiserver、controller-manager、scheduler等。
见官方文档Deploy and Access the Kubernetes Dashboard | Kubernetes,实际上不安装dashboard也是可以直接使用的,有dashboard方便操作。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
当然也可以修改yaml,配置端口,X509证书等
安装dashboard,kubectl apply xxx.yaml,典型的k8s调度安装
kubectl proxy
然后访问:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
访问Authenticating | Kubernetes
根据github也可以
https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md
这里以github为例,实际上就是一个执行指令,一个依赖yaml方式执行指令,本质一样
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
执行yaml,创建账户
创建角色
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
执行yaml
创建token
kubectl -n kubernetes-dashboard create token admin-user
就可以拿到token登录,就可以使用图形界面创建pod等
minikube安装坑特别多,特别是镜像不能下载和权限问题,以ubuntu 22.04LTS为例
就按照官方安装就行了,注意官方源有问题,切换国内源即可。
按照官方教程即可在 Linux 系统中安装并设置 kubectl | Kubernetes
chmod +x kubectl && sudo mv kubectl /usr/local/bin/kubectl
安装后移动到环境变量目录,就可以直接执行命令
下载:curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
mv minikube-linux-amd64 minikube
chmod +x minikube && sudo mv minikube /usr/local/bin/
关键来了minikube start,要求
1. 不能使用root
2. 需要使用国内源
3. 根据实际情况执行命令
Suggestion: Add your user to the 'docker' group: 'sudo usermod -aG docker $USER && newgrp docker'
比如上面的情况,就执行上面的命令
X Exiting due to GUEST_SSH_CERT_NOT_FOUND: Failed to start host: provision: Error getting config for native Go SSH: open /home/huahua/.minikube/machines/minikube/id_rsa: no such file or directory
* Suggestion: minikube is missing files relating to your guest environment. This can be fixed by running 'minikube delete'
* Related issue: https://github.com/kubernetes/minikube/issues/9130
huahua@huahua:~$ minikube delete
* Deleting "minikube" in docker ...
* Deleting container "minikube" ...
* Removing /home/huahua/.minikube/machines/minikube ...
* Removed all traces of the "minikube" cluster.
笔者实验
minikube start --driver=docker --container-runtime=containerd --image-mirror-country=cn --force
可以成功,反正就是不断尝试
看看实际效果
k8s的架构实际上不是很复杂,关键还是在于管理和网络,安装的坑大概率是这些docker镜像下载不了,实际上还有其他容器替代,比如podman,因为k8s支持的接口是固定的,理论上还可以支持其他容器。