Ubuntu下K8S的学习记录-安装
1. 环境
环境统一配置:Ubuntu 24.01 LTS Server
节点统一命名:
- Master:
K8S-M-01
- Pod:
K8S-N-01
- Pod:
K8s-N-02
镜像安装后,进行的配置
1. 常用软件包安装
sudo apt update
sudo apt upgrade
sudo apt install curl wget vim nano
2. SSH
设置
sudo nano /etc/ssh/sshd_config
# 注释修改登录设置
PermitRootLogin yes
# 上传密钥
# 不存在时创建
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "your_public_key_contents" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
3. 设置主机名
sudo hostnamectl set-hostname new-hostname
2. 安装
MicroK8s - Zero-ops Kubernetes for developers, edge and IoT | MicroK8s
1. 在 Ubuntu 上安装 MicroK8s
那么 snap
如何安装呢?
snap install microk8s --classic
2. 配置用户权限
sudo usermod -aG microk8s $USER
sudo chown -f -R $USER ~/.kube
3. 集群初始化和节点配置
1. 启用必要的插件
microk8s enable dns dashboard ingress
2. 在使用的控制节点上,添加其他节点
microk8s add-node
3. 在 node 上输入生成的命令以加入节点
microk8s join 192.168.124.151:25000/5059cfe99a1d46222e5f9bead2286f58/2d7f1f0c7e01
⚠️ 注意
每一个节点都要重新生成加入指令
4. 验证集群的状态
1. 确保 MicroK 8 S 正在运行中
microk8s status --wait-ready
2. 检查节点和Pod状态:
microk8s kubectl get nodes
microk8s kubectl get pods --all-namespaces
3. 踩坑
⚠️ 注意
安装
K8S
的时候,最好处于有代理的环境,否则可能导致部分组件安装失败
卸载 MicroK8s
停止MicroK8s服务:
microk8s stop
卸载MicroK8s: 使用Snap命令卸载MicroK8s,并清除所有相关数据。请注意,这将删除所有集群配置和数据。
sudo snap remove microk8s --purge
重新安装 MicroK8s
更新Snap包管理器(可选): 这可以确保您获得的是最新版本的MicroK8s。
sudo snap refresh
安装MicroK8s: 使用Snap命令重新安装MicroK8s。
sudo snap install microk8s --classic
添加用户到microk8s用户组: 为了避免每次运行microk8s命令时都使用
sudo
,将您的用户添加到microk8s组。sudo usermod -aG microk8s $USER
为用户启用访问权限: 为了访问.kube配置文件,使kubectl命令能正常运行:
sudo chown -f -R $USER ~/.kube
启用MicroK8s服务: 启动MicroK8s并启用所需的插件,比如DNS和Dashboard。
microk8s start microk8s enable dns dashboard
验证MicroK8s安装: 确保MicroK8s和所需服务正常运行。
microk8s status --wait-ready
4. 设置
1. 启用 Dashboard
启用dashboard插件
microk8s enable dashboard
获取访问 token 可选
token=$(microk8s kubectl -n kube-system get secret | grep dashboard-token | awk '{print $1}')microk8s kubectl -n kube-system describe secret $token | grep token: | awk '{print $2}'
- 启动代理
microk8s dashboard-proxy
2. 导出 Kubeconfig
microk8s config view --raw > $HOME/.kube/config # 或其他位置
5. 创建你的第一个应用
apiVersion: apps/v1 # API版本,apps/v1 表示用于Deployment
kind: Deployment # 资源类型,Deployment用于管理Pod的部署
metadata: # 元数据,包含Deployment的名称、标签等信息
name: my-web-app # Deployment的名称
labels: # Deployment的标签,用于识别和选择Deployment
app: my-web-app # app标签,值为my-web-app
tier: frontend # tier标签,值为frontend
spec: # Deployment的规格,定义Deployment的行为
replicas: 3 # 副本数量,表示要运行的Pod数量
selector: # 选择器,用于选择要管理的Pod
matchLabels: # 匹配标签
app: my-web-app # 匹配app标签为my-web-app的Pod
template: # Pod模板,定义要创建的Pod的规格
metadata: # Pod的元数据
labels: # Pod的标签,必须与selector中的matchLabels匹配
app: my-web-app # app标签,值为my-web-app
tier: frontend # tier标签,值为frontend
spec: # Pod的规格
containers: # 容器列表
- name: my-web-container # 容器名称
image: nginx:latest # 容器镜像,使用最新的nginx镜像
ports: # 容器端口列表
- containerPort: 80 # 容器端口,nginx的默认端口
name: http # 端口名称
resources: # 资源限制和请求
requests: # 资源请求,保证Pod能够获得的最小资源量
cpu: 100m # 请求100毫核CPU
memory: 256Mi # 请求256MiB内存
limits: # 资源限制,Pod能够使用的最大资源量
cpu: 200m # 限制为200毫核CPU
memory: 512Mi # 限制为512MiB内存
livenessProbe: # 存活探针,用于检查容器是否正常运行
httpGet: # 通过HTTP GET请求进行探测
path: / # 请求路径
port: http # 端口名称,与上面定义的端口名称对应
initialDelaySeconds: 5 # 初始延迟时间,启动后5秒开始探测
periodSeconds: 10 # 探测周期,每10秒探测一次
readinessProbe: # 就绪探针,用于检查容器是否准备好接收流量
httpGet: # 通过HTTP GET请求进行探测
path: / # 请求路径
port: http # 端口名称,与上面定义的端口名称对应
initialDelaySeconds: 5 # 初始延迟时间,启动后5秒开始探测
periodSeconds: 10 # 探测周期,每10秒探测一次
---
apiVersion: v1 # API版本,v1表示核心API组
kind: Service # 资源类型,Service用于暴露Deployment
metadata: # 元数据
name: my-web-service # Service的名称
spec: # Service的规格
selector: # 选择器,用于选择要暴露的Pod
app: my-web-app # 匹配app标签为my-web-app的Pod
ports: # 端口列表
- protocol: TCP # 协议
port: 80 # Service端口
targetPort: http # Pod端口名称,与Deployment中定义的端口名称对应
type: LoadBalancer # Service类型,LoadBalancer会在云平台上创建一个负载均衡器