K3S
K3s是一个轻量级的Kubernetes发行版,专为资源受限的环境和边缘计算场景设计。相比标准Kubernetes,K3s更小巧、易于部署,且对内存要求较低。它自包含所有必需组件,支持多种架构,适用于边缘设备和各种平台。 K3s的简单性和自动化特性使得在边缘环境中更容易管理和运行容器化应用。
安装
需要至少两台服务器,我这里举例有如下机器。
- 10.60.243.22 (master)
- 10.60.243.23 (node1)
master
只能有一个,然而 node 或者叫 agent
可以有多个。
前戏
如果你是新手,那么建议在安装前做如下操作。 避免在安装过程中遇到各种问题
# 关闭 SELINUX
$ sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
$ setenforce 0
# 关闭 swap
$ vim /etc/fstab
# 找到 swap一行 注释掉
$ swapoff -a
# 关闭防火墙
$ systemctl stop firewalld
$ systemctl start firewalld
安装Master
# 第一步: 设置主机名
$ hostnamectl set-hostname master
# 第二步: 安装 k3s
$ curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh
$ systemctl enable k3s
$ systemctl start k3s
# 第三步: 查看 Token
$ cat /var/lib/rancher/k3s/server/node-token
K10aae509c713ce3***********d921c1b::server:c36179d850a757****4b31
到这里 Master
的安装就结束了,保存上述 Token
我们接着安装节点吧~ (*^▽^*)
安装Agent (节点)
# 第一步: 设置主机名
$ hostnamectl set-hostname node1
# 第二步: 安装 agent
$ curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://10.60.243.22:6443 K3S_TOKEN=K10aae509c713ce3***********d921c1b::server:c36179d850a757****4b31 sh -
$ systemctl enable k3s-agent
$ systemctl start k3s-agent
常量说明
- K3S_URL:Master 节点的内网地址,端口通常是 6443
- K3S_TOKEN:Master 节点的k3s Token
验证安装
安装完成后还需要验证一下是否配置正确,请在 Master
主机执行下列命令
# 查看所有节点,安装正确会返回一个列表
$ kubectl get nodes
卸载
卸载 k3s 执行 /usr/local/bin/k3s-uninstall.sh
卸载 k3s-agent 执行 /usr/local/bin/k3s-agent-uninstall.sh
基本命令
node 节点
# 查看所有节点
$ kubectl get nodes
Delpoy 部署
# 部署/更新部署一个应用
$ kubectl apply -f pod.yml -f service.yml
# 查看部署
$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
server 2/2 2 2 30m
# 删除一个部署
$ kubectl delete deploy <deployment名称>
# 查看历史版本
$ kubectl rollout histoty deployment/<deployment名称>
# 查看指定版本详情
$ kubectl rollout history daemonset/<deployment名称> --revision=3
# 回滚到上一个版本
$ kubectl rollout undo deployment/<deployment名称>
# 回滚到指定版本
$ kubectl rollout undo daemonset/<deployment名称> --to-revision=3
pod
# 查看 pod
$ kubectl get pods
jwjcxy-deployment-7ddc9cf9f8-2jsmb 1/1 Running 0 7m18s
jwjcxy-deployment-5484ccbbd8-b4lxs 1/1 Running 0 108s
$ kubectl get pods --namespace gzcheck # 指定命名空间
$ kubuctl get pods -A # 所有
# 删除 pod
$ kubectl delete pod <pod名称>
# 查看 pod 日志
$ kubectl logs <pod名称>
# 执行pod内部命令 / 进入终端
$ kubectl exec -it <pod名称> -- /bin/sh
跑通一个示例
配置
1
字典 (configMap)
保密字典 (secret)
一般
TLS信息
镜像仓库服务 (私有仓库)
用户名密码
私有 Docker 仓库配置
我想大多数人的应用场景不是为了去公共库拉一个镜像来部署;
而是在公司的私有代码托管平台上,用 ci
构建镜像并提交到私有仓库中,部署的时候直接拉取这个私有仓库的项目。
这样就需要我们在生产服务器中配置一下私有仓库的账号密码等。
直接上才艺~ 😄
# 这是一个 coding 私有制品仓库,login 一下, docker就可以拉去私有镜像 :h******cker.pkg.coding.net/edk24/docker-php:8.1
$ docker login -u project-1700****920 -p 6aff56c31d****17c9c9719 h******cker.pkg.coding.net
# 我们在 k8s 中是配置 secret docker-registry 来实现拉取所有仓库的, 上述命令转换为
$ kubectl create secret docker-registry <docker仓库名> --docker-server=h******cker.pkg.coding.net --docker-username=project-1700****920 --docker-password=6aff56c31d****17c9c9719
# 还需要在 deployment.yml 中指定仓库名, 举例
imagePullSecrets:
- name: <docker仓库名>
imagePullSecrets
与spec.containers
同级