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、设置仓库

Docker换源完整步骤

添加仓库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

最后

基于docker和cri-dockerd部署k8sv1.26.3

2024自建Docker镜像代理加速

posted @   weiguangshun  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起