apt install docker.io
镜像加速
vim /etc/docker/daemon.json
# 在文件中写入
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://3laho3y3.mirror.aliyuncs.com",
"http://f1361db2.m.daocloud.io",
"https://mirror.ccs.tencentyun.com"
]
}
# 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
docker设置
# 检查 Docker 服务的状态
sudo systemctl status docker
# 启动 Docker
sudo systemctl start docker
# 设置 Docker 开机自启
sudo systemctl enable docker
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
wget https://github.com/kubernetes-sigs/kind/releases/download/v0.27.0/kind-linux-amd64
chmod +x kind-linux-amd64
sudo mv kind-linux-amd64 /usr/local/bin/kind
kind version
# 获取集群列表, Kind可以在一个主机上创建多个集群
kind get clusters
# 切换集群demo2,这里名字容易错,是 kind-集群名
kubectl config use-context kind-demo2
# 删除集群
kind delete cluster --name demo
config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: demo
nodes:
- role: control-plane
- role: worker
- role: worker
执行命令
docker pull kindest/node:v1.23.4
kind create cluster --config config.yaml --image kindest/node:v1.23.4
注:创建的集群是默认绑定到127.0.0.1地址上的。此时外部是无法访问到集群内部的资源的
刚刚我们创建的那个是无法访问的,这个是可以访问到集群服务的
删除之前的集群 kind delete cluster --name demo
config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: demo
nodes:
- role: control-plane
image: kindest/node:v1.23.4
extraPortMappings: # 将容器内的 Kubernetes API Server 端口(6443)映射到宿主机的 26443 端口
- containerPort: 6443 # 容器内部端口
hostPort: 26443 # 宿主机映射端口
listenAddress: "0.0.0.0" # 监听所有网络接口
- role: worker
image: kindest/node:v1.23.4
通过 extraPortMappings 将容器中的 6443 端口映射到本机的 26443 端口,这意味着本机上的所有地址都可以通过访问本机的 26443 端口与 Kind 集群中的 6443 服务进行交互。
此时我们可以尝试去访问一下我们的kind集群
这里因为我们没有任何权限,也没有凭证所以这里报错403
创建knd集群
kind create cluster --config config.yaml
Kind 集群中的 Docker 镜像可以从互联网直接拉取,有时候可能比较缓慢,我们可以将本机镜像导入到Kind 集群中去。当有时候你创建集群的时候也很慢的话,也可以这个方法导入 node 的镜像
docker pull alpine
#向 demo 集群的所有节点导入镜像
kind load docker-image --name demo alpine:latest
#向指定的 node 导入镜像
kind load docker-image --name demo --nodes demo-worker,demo-worker2 alpine:latest
#进入某一个节点查看镜像导入情况
docker exec -it demo-worker /bin/bash
ctr -n k8s.io i ls -q |grep alpine
#删除某镜像
ctr -n k8s.io i rm xxxx
使用该镜像创建 Pod 示例
apiVersion: v1
kind: Pod
metadata:
name: alpine
spec:
containers:
- args:
- alpine
image: docker.io/library/alpine:latest
# imagePullPolicy: IfNotPresent
name: pod
command:
- "sleep"
- "infinity"
注:如果用配置文件的方法创建 Pod 还是拉取镜像不成功,修改容器镜像拉取配置
imagePullPolicy: IfNotPresent
表示如果镜像已经存在于本地,则将使用本地的镜像而不进行拉取
或者可以用命令行kubectl run alpine --image=docker.io/library/alpine:latest --restart=Never --overrides='{"apiVersion":"v1","spec":{"containers":[{"name":"pod","command":["sleep","infinity"],"image":"docker.io/library/alpine:latest","securityContext":{"readOnlyRootFilesystem":true}}]}}'
docker pull kindest/node:v1.23.4
两台 ubuntu22.04 虚拟机,一台做 master,一台做 worker,两台虚拟机之间通信正常,都安装好Docker。
一键在机器 master 上安装 master 节点
#安装k3s
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
#创建master节点
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.23.15+k3s1 bash -s - server \
--system-default-registry "registry.cn-hangzhou.aliyuncs.com" \
--write-kubeconfig ~/.kube/config \
--write-kubeconfig-mode 666 \
--disable traefik \
--bind-address 0.0.0.0
如果报错
执行下面的命令
# 复制 k3s 的 kubeconfig 到默认位置
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
# 修改 server 地址为 127.0.0.1(证书默认包含的地址)
sed -i 's/server: .*/server: https:\/\/127.0.0.1:6443/' ~/.kube/config
# 验证连接
kubectl get nodes
弄好后的样子
其他的一些设置
# 配置 containerd 的 mirror
cat > /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
docker.io:
endpoint:
- "http://hub-mirror.c.163.com"
- "https://docker.mirrors.ustc.edu.cn"
- "https://registry.docker-cn.com"
EOF
systemctl restart k3s
# 开机自启
systemctl enable k3s --now
# 启动服务
systemctl start k3s
systemctl status k3s
查看 master 节点的 ip
kubectl get nodes -o wide
获取 master 节点的 token
cat /var/lib/rancher/k3s/server/node-token
apt update
apt install policycoreutils
#K3S_URL替换成实际的master节点IP
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_VERSION="v1.23.15+k3s1" K3S_KUBECONFIG_OUTPUT=~/.kube/config INSTALL_K3S_MIRROR=cn K3S_URL="https://192.168.8.37:6443" K3S_TOKEN="K1036dd97f92311ac0373a033b2633387db796b6f7ab9b54a8d38528bd75a0f46e3::server:16bd37a4f280024da4daed48263a0b09" sh -
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
INSTALL_K3S_MIRROR=cn \
K3S_URL=https://192.168.8.37:6443 \
K3S_TOKEN=K1036dd97f92311ac0373a033b2633387db796b6f7ab9b54a8d38528bd75a0f46e3::server:16bd37a4f280024da4daed48263a0b09 \
bash -s - agent
如果执行 get pod
报错显示 Get "http://localhost:8080/api?timeout=32s": dial tcp 127.0.0.1:8080: connect: connection refused"
大概率是配置问题。把k3s server机器中的/etc/rancher/k3s/k3s.yaml
复制一份到agent 的~/.kube/config 并修改一下server
字段为对应的serverIP
弄好后的样子
其他的一些设置
// 开机自启
systemctl daemon-reload
systemctl enable k3s-agent
// 启动服务
systemctl start k3s-agent
systemctl status k3s-agent
// 重启服务
systemctl restart k3s-agent
// agent 查看配置信息,可以进行修改
vim /etc/systemd/system/k3s-agent.service.env
# 一键卸载 server
k3s-uninstall.sh
# 一键卸载 agent
k3s-agent-uninstall.sh
Kind 是 Kubernetes in Docker 的简写,是一个使用 Docker 容器作为 Node 节点,使用 Containerd 作为容器运行时,在本地创建和运行Kubernetes 集群的工具,解决了在本机运行多个 Node 的问题。适用于在本机创建 Kubernetes 集群环境进行开发和测试,使用 Kind 搭建的集群无法在生产中使用。
使用容器运行时,Kind 使用 Docker。
运行在Docker容器中,资源消耗较大,不适合生产环境
K3s 是 Kubernetes 的缩小版本,是可以在生产上使用的,更适用于小规模集群。通过删除可有可无的功能和使用轻量级组件(例如 sqlite3 而不是 etcd3),软件实现了显着的体积缩减,K3s 将所有 Kubernetes 组件打包为一个单一的二进制文件,简化了安装和管理。使用容器运行时,但 K3s 默认使用 containerd。
通过精简组件(如用SQLite替代etcd)和优化架构,将Kubernetes打包成单个二进制文件。它专为资源受限场景设计,比如边缘计算、IoT设备或小型生产集群,具有极低的资源占用和快速启动的特点