Ubuntu Server 22.04.5安装Docker、Kubernetes
安装Docker
1、固定服务器内网ip
2、关闭swap
swapoff -a
注:为防止重启后swap分区又打开,编辑/etc/fstab,找到包含swap.img的一行,将其注释,一般是最后一行,当然也可能没有
3、设置时间同步
查看时区
cat /etc/timezone
修改时区
timedatectl set-timezone Asia/Shanghai
安装ntpdate同步时间
apt install ntpdate
4、设置仓库
添加仓库GPG
(Add Docker's official GPG key)
sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc
添加仓库源
(Add the repository to Apt sources)
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
--------------或--------------
安装认证工具
sudo apt-get update sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
安装 GPG 证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
新增软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
--------------最后--------------
更新软件源
sudo apt-get -y update
5、卸载docker
apt-get remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
6、软件源搜索docker
sudo apt-cache madison docker-ce
7、设置一个版本常量
VERSION_STRING=5:26.1.4-1~ubuntu.22.04~jammy
8、安装指定版本docker
apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
9、设置docker加速
镜像站:目前国内可用Docker镜像源汇总(截至2024年11月) - CoderJia
DockerHub 镜像仓库 | 是否正常 |
---|---|
hub.xdark.top |
正常 |
hub.littlediary.cn |
正常 |
dockerpull.org |
新增 |
hub.crdz.gq |
正常 |
docker.1panel.live |
正常 |
docker.unsee.tech |
新增 |
docker.m.daocloud.io |
正常 |
docker.kejilion.pro |
正常 |
registry.dockermirror.com |
正常 |
hub.rat.dev |
正常 |
dhub.kubesre.xyz |
正常 |
docker.nastool.de |
正常 |
docker.udayun.com |
新增 |
docker.rainbond.cc |
新增 |
hub.geekery.cn |
新增 |
docker.1panelproxy.com |
新增 |
docker.linkedbus.com |
新增 |
docker.hpcloud.cloud |
失效 |
docker.hlyun.org |
失效 |
doublezonline.cloud |
失效 |
docker.chenby.cn |
失效 |
ginger20240704.asia |
失效 |
lynn520.xyz |
失效 |
hub.docker-ttc.xyz |
失效 |
noohub.ru |
失效 |
docker.nat.tf |
失效 |
dockerproxy.cn |
失效 |
freeno.xyz |
失效 |
docker.registry.cyou |
失效 |
hub.yuzuha.cc |
失效 |
docker-cf.registry.cyou |
失效 |
docker.mrxn.net |
失效 |
dockerproxy.github.io |
失效 |
docker.wget.at |
失效 |
atomhub.openatom.cn |
失效 |
ccr.ccs.tencentyun.com |
失效 |
dockerproxy.com |
失效 |
dislabaiot.xyz |
失效 |
dockerpull.com |
失效 |
hub.firefly.store |
失效 |
创建配置目录
mkdir -p /etc/docker
填充配置
cat /etc/docker/daemon.conf <<EOF { "registry-mirrors": [ "https://registry.docker-cn.com", "https://registry.cn-hangzhou.aliyuncs.com", "https://mirror.ccs.tencentyun.com", "http://hub-mirror.c.163.com", "https://mirror.baidubce.com", "https://docker.mirrors.sjtug.sjtu.edu.cn" ], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF
重启生效
sudo systemctl daemon-reload sudo systemctl restart docker
10、查看docker运行状态
systemctl status docker
# 如果发现docker启动报错 Job for docker.service failed because the control process exited with error code # 先修改daemon的类型(现在使用的是daemon.conf) mv /etc/docker/daemon.json /etc/docker/daemon.conf # 重启docker服务 systemctl restart docker
11、查看docker版本
docker version
安装Kubernetes
1、安装cri-dockerd
Kubernetes在v1.24版本之后删除了dockershim,Docker不再是默认的容器运行时,要想继续使用Docker做容器运行时,需要安装cri-dockerd。
(1)github获取对应版本的cri-dockerd,可以用lsb_release -a
查看ubuntu的发行版本
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd_0.3.4.3-0.ubuntu-focal_amd64.deb
(2)安装cri-dockerd
dpkg -i cri-dockerd_0.3.4.3-0.ubuntu-focal_amd64.deb
(3)修改/usr/lib/systemd/system/cri-docker.service配置
sed -i -e 's#ExecStart=.*#ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9#g' /usr/lib/systemd/system/cri-docker.service
输出
Warning: The unit file, source configuration file or drop-ins of cri-docker.service changed on disk. Run 'systemctl daemon-reload' to reload units.
按照提示操作
systemctl daemon-reload
(4)重启cri-docker
systemctl restart cri-docker
(5)开启IPv4转发
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF
(6)刷新配置
sudo sysctl --system
(7)查看cri-docker运行状态
systemctl status cri-docker
2、安装认证工具
apt-get install -y apt-transport-https ca-certificates curl
3、设置仓库
添加仓库GPG
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
或
curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg cat /usr/share/keyrings/kubernetes-archive-keyring.gpg | sudo apt-key add -
添加仓库源
cat >> /etc/apt/sources.list.d/kubernetes.list <<EOF deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF
或
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
移动docker的软件源到root文件夹
mv /etc/apt/sources.list.d/docker.list /root/
更新软件源
apt update
4、软件源搜索kubernetes
sudo apt-cache madison kubeadm
5、卸载kubernetes
(1)停止 Kubernetes 服务
sudo systemctl stop kubelet
(2)删除 Kubernetes 二进制文件和配置文件
sudo rm -rf /etc/kubernetes/*
(3)删除 kubelet 和 kubectl
sudo apt purge kubelet kubeadm kubectl kubernetes-cni
或
apt remove kubelet kubeadm kubectl kubernetes-cni
注:apt-get remove 会删除[软件包]而保留软件的[配置文件];apt-get purge 会同时清除[软件包]和软件的[配置文件]。
(4)删除 Docker 容器运行时
sudo apt purge docker.io
(5)删除相关的配置目录和文件
sudo rm -rf /var/lib/kubelet/* sudo rm -rf /var/lib/etcd/* sudo rm -rf /var/lib/cni/* sudo rm -rf /var/run/kubernetes/*
(6)清理 iptables 规则
sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X
6、安装指定版本kubernetes
sudo apt-get install -y kubelet=1.26.1-00 kubeadm=1.26.1-00 kubectl=1.26.1-00 kubernetes-cni=1.2.0-00
7、锁定版本,防止自动升级
apt-mark hold kubelet kubeadm kubectl kubernetes-cni
8、查看版本
kubelet --version kubeadm version kubectl version
解决使用docker配置k8s kubectl报错kubectl: command not found
(使用docker配置k8s kubectl报错:kubectl: command not found)
(1)首先用命令find / -name kubectl 查找kubectl所在的位置
我的环境kubectl所在的位置:
/usr/bin/kubectl
(2)这个路径添加到系统的path,编辑 vim /etc/profile。在profile中添加:
export PATH="/usr/bin/:$PATH"
9、初始化kubeadm
kubeadm init --apiserver-advertise-address=192.168.230.125 \ --image-repository registry.aliyuncs.com/google_containers \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --cri-socket unix:///var/run/cri-dockerd.sock
说明:
- apiserver-advertise-address为本机的固定IP;
- service-cidr是(多个)主节点之间网络可使用的IP段;
- pod-network-cidr是内部的(多个)pod节点之间网络可以使用的IP段;
- cri-socket是指定容器运行时(1.24版本后默认是containerd,改为使用docker)的Socket文件路径。
执行成功后
(1)复制输出信息,后面其它节点加入进来需要使用
重置节点加入命令执行以下命令(k8s集群新增节点重新生成token、certificate-key等操作):
kubeadm token create --print-join-command
(2)按照提示继续执行
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf
即
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config export KUBECONFIG=/etc/kubernetes/admin.conf
(3)生成默认的kubeadm-config.yaml
文档
kubeadm config print init-defaults
(4)查看节点状态:
kubectl get pods -A --watch
或
kubectl get pods --all-namespaces -o wide --watch
重置kubeadm
(1)重置kubeadm
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock kubeadm reset -f --cri-socket unix:///var/run/containerd/containerd.sock rm -rf $HOME/.kube/config ipvsadm --clear rm -rf /etc/cni/net.d/*
(2)初始化后查看节点信息
kubectl get nodes
查看节点
kubectl get nodes -o wide
10、安装calico网络插件
参考文献:K8s CNI 网络对比:Flannel、Calico、Canal 和 Weave
wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.3/manifests/calico.yaml
手动下载 https://github.com/projectcalico/calico/tree/v3.27.3/manifests
(1)修改calico.yaml
内的CALICO_IPV4POOL_CIDR
部分的值为初始化kubeadm集群时的pod-network-cidr
的内容,注意修改时要删除对应项前面的#
++++++++++++++++++++++++++++++++++++++++++++++++
由于默认的calico.yaml
中所使用的镜像来源于docker.io国外镜像源,上面配置了Docker镜像加速,应删除docker.io前缀以使镜像从国内镜像加速站点下载。(k8s-calico网络插件安装)) 或 替换为 docker.unsee.tech前缀。
cat calico.yaml |grep 'image:' sed -i 's#docker.io/##g' calico.yaml cat calico.yaml |grep 'image:'
注:若连接不了,可通过以上的cat获悉需要哪些镜像,然后从其它地方下载镜像文件,再导入本地
(2)安装:注意下载的calico.yaml所在路径不同
可以提前使用镜像站下载images。
docker pull docker.unsee.tech/calico/kube-controllers:v3.27.3 docker pull docker.unsee.tech/calico/cni:v3.27.3 docker pull docker.unsee.tech/calico/node:v3.27.3
然后再安装
kubectl create -f calico.yaml kubectl apply -f calico.yaml
注:国内节点已失效,需要连接国外网络
卸载calico
(1)卸载calico
注意下载的calico.yaml
所在路径不同
kubectl delete -f calico.yaml
注:使用xxx.yaml
安装时,卸载都是统一的kubectl delete -f xxx.yaml
(2)重置(未看出作用,可不执行)
modprobe -r ipip
(3)卸载master、node节点上所有关于calico的安装信息
rm -rf /etc/cni/net.d/* rm -rf /var/lib/cni/calico
注:如果有加入kubeadm集群的,子节点也需要执行
(4)每个节点重启kubelet
systemctl restart kubelet
(5)删除coredns的pod(可不执行)
(6)查看节点状态,观察是否卸载成功(calico名字的pod消失)
kubectl get pods -A --watch
11、安装dashboard
注:若是kubernetes目前还是单节点,dashboard的pod会一直处于pending状态,查看pod的内部描述,最下面有事件报错:
Warning FailedScheduling 3h7m (x3 over 3h18m) default-scheduler 0/1 nodes are available: 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling..
原因就是主节点作为控制节点,无法被调度,需要至少一个调度节点。解决方法见参考文献。
参考文献:0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn‘t_that the pod didn't tolerate.、Pod无法调度到可用的节点上(K8s)_1 preemption is not helpful for scheduling
(1)获取recommended.yaml
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
(2)修改recommended.yaml
其中images添加前缀:docker.unsee.tech/ 或 docker.1panel.live/ 。可以提前使用镜像站下载images。
docker pull docker.unsee.tech/kubernetesui/dashboard:v2.7.0 docker pull dockerd.unsee.tech/kubernetesui/metrics-scraper:v1.0.8
另外:找到 kind: Service (port: 443的部分),在其spec下添加配置type为NodePort:
示例:
…… kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: NodePort ports: - port: 443 targetPort: 8443 selector: k8s-app: kubernetes-dashboard ……
然后应用安装:
kubectl apply -f recommended.yaml
(3)观察节点是否就绪
kubectl get svc,pods -o wide -n kubernetes-dashboard
就绪后根据上面语句打印的443:xxx的端口,打开浏览器访问:https://ip:xx
(4)创建Token
kubectl create serviceaccount dashboard-admin -n kube-system kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin kubectl create token dashboard-admin -n kube-system
卸载dashboard
kubectl delete -f recommended.yaml
参考文献:K8S 部署和访问 Kubernetes 仪表板(Dashboard)、K8s集群v1.26.1版本的简单部署实践
新版本Kubenetes Dashboard仅支持基于 Helm 的安装(新版注意如何通过Helm卸载,不是通过yaml直接安装的):
https://kubernetes.io/zh-cn/docs/tasks/access-application-cluster/web-ui-dashboard/、
https://helm.sh/zh/docs/intro/install/
首先在主机或主节点上安装 Helm:
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null sudo apt-get install apt-transport-https --yes echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list sudo apt-get update sudo apt-get install helm --yes
添加 kubernetes-dashboard 仓库
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
使用 kubernetes-dashboard Chart 部署名为 kubernetes-dashboard
的 Helm Release
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard
命令行代理 。使用 kubectl 命令行工具来启用 Dashboard 访问,命令如下:
kubectl proxy
kubectl 会使得 Dashboard 可以通过 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ 访问。UI 只能通过执行这条命令的机器进行访问。更多选项参见 kubectl proxy --help。
安装 metrics-server 的图表
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/ helm repo update helm install metrics-server metrics-server/metrics-server --namespace kube-system
卸载 metrics-server
kubectl delete apiservice v1beta1.metrics.k8s.io kubectl -n kube-system delete service metrics-server kubectl -n kube-system delete deployment metrics-server
https://akyriako.medium.com/install-kubernetes-on-ubuntu-20-04-f1791e8cf799
卸载dashboard
helm delete kubernetes-dashboard --namespace kubernetes-dashboard
raw.githubusercontent.com/kubernetes/dashboard/v3.0.0-alpha0/charts/kubernetes-dashboard.yaml
保存文件,修改image:,把docker.io/替换为docker.unsee.tech/,然后提前拉取镜像。
docker pull docker.unsee.tech/kubernetesui/dashboard-api:v1.0.0 docker pull docker.unsee.tech/kubernetesui/dashboard-web:v1.0.0 docker pull docker.unsee.tech/kubernetesui/metrics-scraper:v1.0.9
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.2/cert-manager.yaml
然后安装
kubectl apply -f kubernetes-dashboard.yaml
查看pod内部信息
kubectl describe pods -n kube-system coredns-5bfd685c78-mmjxc
监控仪表盘是否安装完成
watch kubectl get all -o wide -n kubernetes-dashboard
访问 Dashboard 用户界面,查看 kubernetes-dashboard Service暴露的端口
kubectl get svc -n kubernetes-dashboard -o wide
12、设置主节点的etcd高可用
https://blog.csdn.net/weixin_43810267/article/details/132962882
https://blog.csdn.net/weixin_36755535/article/details/127393197
https://blog.csdn.net/WuLex/article/details/130798935
https://blog.csdn.net/WuDan_1112/article/details/125950691#t11
https://zhuanlan.zhihu.com/p/616518714
所用到的docker镜像
control-pannel(主节点):
calico/cni:v3.26.1 calico/node:v3.26.1 registry.aliyuncs.com/google_containers/etcd:3.5.6-0 registry.aliyuncs.com/google_containers/kube-apiserver:v1.26.15 registry.aliyuncs.com/google_containers/kube-controller-manager:v1.26.15 registry.aliyuncs.com/google_containers/kube-proxy:v1.26.15 registry.aliyuncs.com/google_containers/kube-scheduler:v1.26.15 registry.aliyuncs.com/google_containers/pause:3.9
node(子节点):
calico/cni:v3.26.1 calico/kube-controllers:v3.26.1 calico/node:v3.26.1 kubernetesui/dashboard:v2.7.0 kubernetesui/metrics-scraper:v1.0.8 registry.aliyuncs.com/google_containers/coredns:v1.9.3 registry.aliyuncs.com/google_containers/kube-proxy:v1.26.15 registry.aliyuncs.com/google_containers/pause:3.9 registry.k8s.io/pause:3.6
子节点加入主节点
子节点同样执行上面的安装截止到kubernetes的《查看版本》
使用vmvare克隆主机注意点
注:做快照最好关机,后续快照才允许被克隆!!!
适用:Ubuntu Server 22.04、vmvare
启动前:
1、启动前重新生成MAC地址:虚拟机设置--网络适配器--高级(必须执行)
启动后:
1、修改hostname(建议执行):
hostnamectl --static set-hostname 新的主机名
例:hostnamectl --static set-hostname ubuntu-22-04-5-2
2、修改静态IP(必须执行--也适用于非克隆主机修改静态IP):
(1)修改/etc/netplan/50-cloud-init.yaml
文件中的静态IP
(2)应用生效:sudo netplan apply
注:只完成以上操作,重启IP会恢复回去!!!
(3)根据50-cloud-init.yaml文件最上面几行的提示,创建/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
文件
(4)并写入network: {config: disabled}
,保存退出,重启发现IP修改生效。
3、执行以下命令(可不执行):
参考文献:https://huaweicloud.csdn.net/6715e5f50636ea24a0c24079.html
rm -f /etc/machine-id rm -f /var/lib/dbus/machine-id systemd-machine-id-setup systemd-machine-id-setup
根据上面初始化kubeadm获得的节点加入命令加入节点
kubeadm join 192.168.30.11:6443 --token wnan63.0sqjhavjn8tse02r \ --discovery-token-ca-cert-hash sha256:2aee80bb2b9e4025b43eefbe029f090325d6255a275ae9b29525e671f0d7094e --cri-socket unix:///var/run/cri-dockerd.sock
注:在初始化kubeadm时成功后输出的提示命令后加上--cri-socket unix:///var/run/cri-dockerd.sock
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?