家里有一台服务器,平时做为自己用的开发环境在使用,跑着一些小程序。打算将这台服务器做一些升级,将常用的开发用的工具使用k3s来进行管理,方便自己使用。因本人只有一台服务器,所以本次文章中没有集群。
K3S版本: v1.17.4+k3s1
Docker版本: 19.03.6
k3s离线安装包
GitHub的release下载没速度,做个临时搬运工,把本次安装的版本都下载到网盘了
链接: https://pan.baidu.com/s/1-r_uea4lz29RVhPGwaTRyw
提取码: 5ir4
# 创建目录
sudo mkdir -p /var/lib/rancher/k3s/agent/images/
#复制离线镜像到指定目录
sudo cp k3s-airgap-images-amd64.tar /var/lib/rancher/k3s/agent/images/
#复制k3s并授权
sudo cp ./k3s /usr/local/bin && sudo chmod 755 /usr/local/bin/k3s
#授权install
chmod +x install.sh
# 手动安装命令
INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_EXEC="--docker --no-deploy traefik" ./install.sh
安装docker后
中国大陆境内Docker镜像加速器。
阿里云:
1. 打开https://cr.console.aliyun.com,并登录自己的阿里云账户
2. 点击左方的 镜像中心 - 镜像加速器 ,然后在下方会有一个操作文档,复制其中的命令,粘贴到你的SSH窗口中即可完成镜像源的更换。
准备所需k3s镜像
docker pull rancher/coredns-coredns:1.6.3
docker pull rancher/local-path-provisioner:v0.0.11
docker pull rancher/metrics-server:v0.3.6
docker pull rancher/klipper-helm:v0.2.3
自动快速安装命令
## “--docker”使用Docker作为容器<默认使用containerd>
## “--no-deploy traefik”表示不使用traefik服务
## “--flannel-backend=none” 表示使用自定义Custom CNI
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--docker --no-deploy traefik --flannel-backend=none" sh -
如启动后还有traefik服务,请参考下边方式关闭。之后会使用ingress做为方向代理服务使用。
关闭默认的traefik服务
## 进入k3s默认启动编排目录
cd /var/lib/rancher/k3s/server/manifests
## 重命名traefik编排,防止关机重启后再次启动
mv traefik.yaml traefik.yaml_back
## 查看反向代理服务运行状态(traefik)
kubectl get svc traefik --namespace kube-system -w
kubectl describe svc traefik --namespace kube-system | grep Ingress | awk '{print $3}'
提示:表示当前集群中没有traefik服务,否则需要手动删除
Error from server (NotFound): services "traefik" not found
## 手动删除traefik
kubectl delete -f traefik.yaml
## 修改K3S服务的配置文件
vim /etc/systemd/system/multi-user.target.wants/k3s.service
## 修改ExecStart的值,将其修改为:
ExecStart=/usr/local/bin/k3s server --docker --no-deploy traefik
查看启动节点
### sudo kubectl get nodes
root@MiWiFi-R1CM-srv:~# sudo kubectl get nodes
NAME STATUS ROLES AGE VERSION
miwifi-r1cm-srv Ready master 3d7h v1.17.3+k3s1
查看基础服务启动状态
### kubectl -n kube-system get pods
root@MiWiFi-R1CM-srv:~# kubectl -n kube-system get pods
NAME READY STATUS RESTARTS AGE
local-path-provisioner-58fb86bdfd-l8msw 1/1 Running 2 3d7h
metrics-server-6d684c7b5-k8r9n 1/1 Running 1 3d7h
coredns-d798c9dd-67mmc 1/1 Running 1 3d7h
卸载k3s
## 初次安装必备
sh /usr/local/bin/k3s-uninstall.sh
安装ingress(反向代理)
编排文件:
https://gitee.com/doudoumaomao/free-cloud-deploy/tree/master/develop/k3s
需要先安装ingress-controller,当服务启动后会自动监听80端口与443端口。
接着启动tomcat
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: kube-public
name: tomcat-service
labels:
app: tomcat-service
spec:
replicas: 1
selector:
matchLabels:
app: tomcat-service
template:
metadata:
labels:
app: tomcat-service
spec:
containers:
- name: tomcat-service
image: tomcat
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
namespace: kube-public
name: tomcat-service
spec:
ports:
- port: 8080
protocol: TCP
selector:
app: tomcat-service
增加反向代理:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
namespace: kube-public
name: ingress-nginx
spec:
rules:
- host: a1.free-js.com
http:
paths:
- backend:
serviceName: tomcat-service
servicePort: 8080
查看服务启动情况
kubectl get svc --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 3d9h
kube-system kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 3d9h
kube-system metrics-server ClusterIP 10.43.23.150 <none> 443/TCP 3d9h
ingress-nginx ingress-nginx NodePort 10.43.103.187 <none> 80:30729/TCP,443:30338/TCP 4h47m
kube-public tomcat-service ClusterIP 10.43.180.159 <none> 8080/TCP 169m
验证解析
## 修改本地hosts文件,增加域名解析
192.168.10.110 a1.free-js.com
## 测试反向代理是否成功,如提示为tomat一场信息就表示已正确代理。
curl http://a1.free-js.com
至此k3s已正常启动,后续会将常用的一些服务,编排起来。
修改k3s.service 修改k3s service保证之后服务启动,按该方式启动 vim /etc/systemd/system/multi-user.target.wants/k3s.service
[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
Wants=network-online.target
[Install]
WantedBy=multi-user.target
[Service]
Type=notify
EnvironmentFile=/etc/systemd/system/k3s.service.env
KillMode=process
Delegate=yes
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Restart=always
RestartSec=5s
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/k3s server --docker --no-deploy traefik --flannel-backend=none