# k3s-k8s **Repository Path**: hello-rong/k3s-k8s ## Basic Information - **Project Name**: k3s-k8s - **Description**: k3s/k8s的安装与使用 - **Primary Language**: YAML - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-12-08 - **Last Updated**: 2023-09-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # K3S/K8S 安装和使用 ## K3S指南 [K3S指南](https://docs.rancher.cn/docs/k3s/quick-start/_index "K3S指南") ## 安装实践 ### 服务器准备 ``` Name State IPv4 Image vm0 Running 192.168.64.11 Ubuntu 20.04 LTS vm1 Running 192.168.64.7 Ubuntu 20.04 LTS vm2 Running 192.168.64.8 Ubuntu 20.04 LTS ``` ### 服务器端口占用 - 30000会被dashboard使用 - 30001~30006会被MQTT/EMQX使用(admin-dashboard/mqtt/mqttssl/ws/wss/http/...) ### 高可用多主模式安装(嵌入式DB的高可用-内置的ETCD) ##### 安装第一台服务器(vm0) ``` curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_TOKEN=hellorongsvrtoken INSTALL_K3S_EXEC="server --cluster-init" sh -s - ``` ##### 安装其他服务器(vm1,vm2) ``` curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_TOKEN=hellorongsvrtoken INSTALL_K3S_EXEC="server --server https://192.168.64.11:6443" sh -s - ``` ##### 查看集群节点 ``` sudo kubectl get node NAME STATUS ROLES AGE VERSION vm0 Ready control-plane,etcd,master 33m v1.21.7+k3s1 vm1 Ready control-plane,etcd,master 30m v1.21.7+k3s1 vm2 Ready control-plane,etcd,master 29m v1.21.7+k3s1 ``` ##### 安装仪表盘 下载配置文件 ``` wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/dashboard-v2.4.0.yaml ``` 下载仪表盘管理员配置文件 ``` wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/dashboard-admin-user.yaml ``` 应用配置文件 ``` sudo kubectl apply -f dashboard-v2.4.0.yaml sudo kubectl apply -f dashboard-admin-user.yaml ``` 查看管理员token ``` sudo kubectl -n kubernetes-dashboard describe secret $(sudo kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}') ``` 在浏览器访问仪表盘 - 【注意】:因为是集群自签发的证书,大部分浏览器可能会拦截,此时可以在键盘输入`thisisunsafe`即可打开 ``` https://192.168.64.11:30000/ ``` ##### 测试WEB服务和负载均衡 使用命令行创建两个服务(可以写配置,这里仅测试一下,所以用命令行了) ``` sudo kubectl create deployment web1 --replicas=3 --image=docker.io/hansd/hello-app:latest sudo kubectl expose deployment web1 --type=NodePort --port=8080 sudo kubectl create deployment web2 --image=docker.io/hansd/hello-app:latest sudo kubectl expose deployment web2 --type=NodePort --port=8080 ``` 下载负载均衡配置文件并执行 ``` wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/lbs-vhost.yaml sudo kubectl apply -f lbs-vhost.yaml sudo kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE lbs-vhost web01.k8s.cc 80 27s ``` 在浏览器里查看效果 ``` http://192.168.64.11 http://192.168.64.11/v1 http://192.168.64.11/v2 ``` ### 其他应用安装 ##### NFS文件服务器(也可以使用其他方式实现持久化存储) NFS安装:不同的OS安装方式有所差异,可以直接搜索安装方法。 NFS配置参考(更详细的配置可以度娘) ``` sudo exportfs -h usage: exportfs [-adfhioruvs] [host:/path] -- exportfs--------------- -a 全部挂载或者全部卸载 -r 重新挂载 -u 卸载某一个目录 -v 显示共享目录 -- ----------------------- sudo exportfs -ra sudo exportfs -v cat /etc/exports /nfs *(rw,sync,no_subtree_check,no_root_squash,fsid=0) /nfs/mysql *(rw,sync,no_subtree_check,no_root_squash) /nfs/redis *(rw,sync,no_subtree_check,no_root_squash) /nfs/wwwroot *(rw,sync,no_subtree_check,no_root_squash) ``` ##### mysql安装(使用NFS持久化存储,HA方式需修改配置文件) ``` wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/mysql-pv.yaml wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/mysql-pvc.yaml wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/mysql-phpmyadmin.yaml wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/mysql.yaml sudo kubectl apply -f mysql-pv.yaml sudo kubectl apply -f mysql-pvc.yaml sudo kubectl apply -f mysql-phpmyadmin.yaml sudo kubectl apply -f mysql.yaml http://192.168.64.11/php-mysql-admin ``` ##### redis安装(使用NFS持久化存储,HA方式需修改配置文件) ``` wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/redis-pv.yaml wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/redis-pvc.yaml wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/redis.yaml sudo kubectl apply -f redis-pv.yaml sudo kubectl apply -f redis-pvc.yaml sudo kubectl apply -f redis.yaml ``` ##### mqtt之emqx ``` wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/mqtt-emqx-pv.yaml wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/mqtt-emqx-pvc.yaml wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/mqtt-emqx.yaml sudo kubectl apply -f mqtt-emqx-pv.yaml sudo kubectl apply -f mqtt-emqx-pvc.yaml sudo kubectl apply -f mqtt-emqx.yaml kubectl exec emqx-statefulset-0 -- emqx_ctl cluster status ``` ##### html/vuejs之类的程序布署 使用nginx镜像即可(可以把html/js的WEB站点文件打包到镜像里,也可以放到nfs路径下,然后使用nginx基础镜像来映射pvc) ##### php程序布署及其他类型的程序布署参考 ###### 镜像 `hellorong/php-apache:7.2.6` 此镜像是在PHP的基础镜像上,启用mysqli和pdo_mysql扩展、安装redis扩展、gd库,其他若有需要的扩展可以在此基础上增加,Dockerfile可参考: [PHP镜像Dockerfile](https://hub.docker.com/repository/docker/hellorong/php-apache) [NUXTJS镜像Dockerfile](https://hub.docker.com/repository/docker/hellorong/node-nuxtjs) [GO镜像Dockerfile](https://hub.docker.com/repository/docker/hellorong/go-fly) ###### 配置 参考配置文件(需要修改持久化存储路径,访问的域名或二级目录等),如果不需要对外暴露服务,则不需要使用nodePort的方式布署,也不需要ingress的配置段 ``` wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/tp5-api-pv.yaml wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/tp5-api-pvc.yaml wget https://gitee.com/hello-rong/k3s-k8s/blob/master/conf/tp5-api.yaml ``` ## K8S安装可能会遇到的问题 ##### 镜像问题 镜像下载不了,导致服务启动不了,此时可以在docker.io上先下载镜像,通过tag,然后再导入到k8s,相关的bash参考 ``` docker pull willdockerhub/ingress-nginx-controller:v1.0.0-alpha.2 docker image tag 2b2a6487f032 k8s.gcr.io/ingress-nginx/controller:v1.0.0-alpha.2 docker save k8s.gcr.io/ingress-nginx/controller:v1.0.0-alpha.2 > ingress-nginx-controller.tar microk8s ctr image import ingress-nginx-controller.tar ```