Docker环境

添加 Docker 的官方 GPG 密钥

  • 安装 apt 依赖包,用于通过 HTTPS 来获取仓库

    sudo apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg2 \
        software-properties-common -y
    
  • 添加秘钥

    curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -
    
  • 添加Docker稳定版仓库

    sudo add-apt-repository \
       "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/debian \
       $(lsb_release -cs) \
       stable"
    apt-get update -y
    

添加Docker国内源配置

添加阿里云docker源

vim /etc/apt/sources.list

deb http://mirrors.aliyun.com/docker-ce/linux/debian stretch stable

apt update -y

apt update -y 出现证书错误请安装对应证书

安装最新版本docker

apt-get install docker-ce docker-ce-cli containerd.io -y

安装指定版本docker

apt-cache madison docker-ce

docker-ce | 5:19.03.153-0debian-stretch | http://mirrors.aliyun.com/docker-ce/linux/debian stretch/stable amd64 Packages
docker-ce | 5:19.03.143-0debian-stretch | http://mirrors.aliyun.com/docker-ce/linux/debian stretch/stable amd64 Packages
docker-ce | 5:19.03.133-0debian-stretch | http://mirrors.aliyun.com/docker-ce/linux/debian stretch/stable amd64 Packages
docker-ce | 5:19.03.123-0debian-stretch | http://mirrors.aliyun.com/docker-ce/linux/debian stretch/stable amd64 Packages
docker-ce | 5:19.03.113-0debian-stretch | http://mirrors.aliyun.com/docker-ce/linux/debian stretch/stable amd64 Packages
docker-ce | 5:19.03.103-0debian-stretch | http://mirrors.aliyun.com/docker-ce/linux/debian stretch/stable amd64 Packages
docker-ce | 5:19.03.93-0debian-stretch | http://mirrors.aliyun.com/docker-ce/linux/debian stretch/stable amd64 Packages
docker-ce | 5:19.03.83-0debian-stretch | http://mirrors.aliyun.com/docker-ce/linux/debian stretch/stable amd64 Packages
docker-ce | 5:19.03.73-0debian-stretch | http://mirrors.aliyun.com/docker-ce/linux/debian stretch/stable amd64 Packages
docker-ce | 5:19.03.63-0debian-stretch | http://mirrors.aliyun.com/docker-ce/linux/debian stretch/stable amd64 Packages

使用第二列中的版本字符串安装特定版本,例如5:19.03.153-0debian-stretch

apt-get install docker-ce=5:19.03.15~3-0~debian-stretch docker-ce-cli=5:19.03.15~3-0~debian-stretch containerd.io -y

Docker 拉取镜像拉取加速

vim /etc/docker/daemon.json
{

 "registry-mirrors": [
 	"https://reg-mirror.qiniu.com",
 	"https://hub-mirror.c.163.com",
 	"https://docker.mirrors.ustc.edu.cn"
 ],

 "exec-opts": ["native.cgroupdriver=systemd"]

}

native.cgroupdriver=systemd 后续使用K8S提前配置不使用k8s可以不配置

重新启动服务

systemctl daemon-reload
systemctl restart docker

检查加速器是否生效

docker info

Registry Mirrors:
https://reg-mirror.qiniu.com/

K8S环境

主机名地址备注
k8s-master10.0.20.7主节点
k8s-node110.0.20.3

前置环境配置

  • 每台主机配置host

    vim /etc/hosts
    

    添加配置

    10.0.20.3 k8s-node1
    10.0.20.7 k8s-master
    
  • 关闭各节点的防火墙

    systemctl disable nftables.service && systemctl stop nftables.service && systemctl status nftables.service
    
  • 永久禁用各节点的交换分区

    swapoff -a && sed -i 's/.*swap.*/#&/' /etc/fstab # 注释掉swap那一行
    
  • 同步各节点的时区

    timedatectl set-timezone Asia/Shanghai # 设置系统时区为中国/上海
    

K8S源配置

kubeadm 不能帮你安装或者管理 kubelet 或 kubectl, 所以你需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 然而,控制平面与 kubelet 之间可以存在一个次要版本的偏差,但 kubelet 的版本不可以超过 API 服务器的版本

  • 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包

    apt-get update -y
    apt-get install -y apt-transport-https ca-certificates curl -y
    
  • 下载 Google Cloud 公开签名秘钥

    # sudo curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
    # 将证书下载到/usr/share/keyrings/kubernetes-archive-keyring.gpg
    sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg
    
  • 添加 Kubernetes apt 仓库

    echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    
  • 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本

    sudo apt-get upgrade -y && sudo apt-get update -y
    

安装K8S

  • K8S 1.20版本以前,CRI内部维护了DockerShim,CR使用的是Docker, CRI与CR进行交互时是通过DockerShim桥接来实现的

  • K8S 1.20版本以后,CRI内部取消的DockerShim(市场上大部分CR都遵循了K8S的CRI规范,KS8为了适应更多的CR而放弃了Docker,如果还想使用Docker则需要外部单独安装cri-dockerd),CR使用的是Containerd

    使用docker容器建议使用K8S版本1.20以前版本,1.20版本后需要搭配cri-dockerd才能使用

安装最新版本

apt-get install -y kubelet kubeadm kubectl 
# sudo apt-get remove kubelet kubeadm kubectl # 卸载

查看可用版本

apt-cache madison kubeadm
# 安装1.19.1-00 版本
apt-get install -y kubelet=1.19.1-00 kubeadm=1.19.1-00  kubectl=1.19.1-00 

锁定版本

sudo apt-mark hold kubelet kubeadm kubectl # 锁定版本,标记软件包不被自动更新

添加 kubelet 开机自启

sudo systemctl enable kubelet # 添加 kubelet 开机自启
sudo systemctl restart kubelet && sudo systemctl status kubelet # 重启并查看状态

初始化master节点

# kubernetes-version #制定 kubernetes 版本
# image-repository  #选择用于拉取镜像的容器仓库
# apiserver-advertise-address #当前 Master 主机的ip地址
# service-cidr #为服务的虚拟 IP 地址段,默认值:"10.96.0.0/12"
# pod-network-cidr #指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDR
   kubeadm init \
    --kubernetes-version v1.19.1 \
    --image-repository registry.aliyuncs.com/google_containers \
    --apiserver-advertise-address 10.0.20.7 \
    --service-cidr 10.245.0.0/12 \
    --pod-network-cidr 10.244.0.0/16 

安装成功提示
Your Kubernetes control-plane has initialized successfully!

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.0.20.7:6443 --token z6f8b5.eg77ay382qnkmhu3 \
    --discovery-token-ca-cert-hash sha256:748d1140b11748a015a4fbb3629b99050e1eb4749b1af12e23c0e348ece1dc9a
  • Master节点执行

     mkdir -p $HOME/.kube
     sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
     sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  • 所有Node节点执行(加入Node节点到Master节点)

    kubeadm join 10.0.20.7:6443 --token z6f8b5.eg77ay382qnkmhu3 \
        --discovery-token-ca-cert-hash sha256:748d1140b11748a015a4fbb3629b99050e1eb4749b1af12e23c0e348ece1dc9a
    

安装kuboard

安装 Kuboard v3.x 版本的指令如下

sudo docker run -d \
  --restart=unless-stopped \
  --name=kuboard \
  -p 80:80/tcp \
  -p 10081:10081/tcp \
  -e KUBOARD_ENDPOINT="http://内网IP:80" \
  -e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \
  -v /root/kuboard-data:/data \
  eipwork/kuboard:v3
  # 也可以使用镜像 swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3 ,可以更快地完成镜像下载。
  # 请不要使用 127.0.0.1 或者 localhost 作为内网 IP \
  # Kuboard 不需要和 K8S 在同一个网段,Kuboard Agent 甚至可以通过代理访问 Kuboard Server \

DANGER

  • KUBOARD_ENDPOINT 参数的作用是,让部署到 Kubernetes 中的 kuboard-agent 知道如何访问 Kuboard Server;
  • KUBOARD_ENDPOINT 中也可以使用外网 IP;
  • Kuboard 不需要和 K8S 在同一个网段,Kuboard Agent 甚至可以通过代理访问 Kuboard Server;
  • 建议在 KUBOARD_ENDPOINT 中使用域名;
  • 如果使用域名,必须能够通过 DNS 正确解析到该域名,如果直接在宿主机配置 /etc/hosts 文件,将不能正常运行;

参数解释

  • 建议将此命令保存为一个 shell 脚本,例如 start-kuboard.sh,后续升级 Kuboard 或恢复 Kuboard 时,需要通过此命令了解到最初安装 Kuboard 时所使用的参数;
  • 第 4 行,将 Kuboard Web 端口 80 映射到宿主机的 80 端口(您可以根据自己的情况选择宿主机的其他端口);
  • 第 5 行,将 Kuboard Agent Server 的端口 10081/tcp 映射到宿主机的 10081 端口(您可以根据自己的情况选择宿主机的其他端口);
  • 第 6 行,指定 KUBOARD_ENDPOINT 为 http://内网IP,如果后续修改此参数,需要将已导入的 Kubernetes 集群从 Kuboard 中删除,再重新导入;
  • 第 7 行,指定 KUBOARD_AGENT_SERVER 的端口为 10081,此参数与第 5 行中的宿主机端口应保持一致,修改此参数不会改变容器内监听的端口 10081,例如,如果第 5 行为 -p 30081:10081/tcp 则第 7 行应该修改为 -e KUBOARD_AGENT_SERVER_TCP_PORT="30081"
  • 第 8 行,将持久化数据 /data 目录映射到宿主机的 /root/kuboard-data 路径,请根据您自己的情况调整宿主机路径;

其他参数

  • 在启动命令行中增加环境变量 KUBOARD_ADMIN_DERAULT_PASSWORD,可以设置 admin 用户的初始默认密码。

kubectl客户端调用远程集群

官方文档 在 Linux 系统中安装并设置 kubectl | Kubernetes

  • 下载客户端

    wget https://dl.k8s.io/release/v1.23.0/bin/linux/amd64/kubectl
    
    chmod 777 kubectl  # 允许执行
    
  • 验证 kubectl 配置

    将master 节点下 ~/.kube/config 复制在当前用户 ~/.kube/config

    kubectl get nodes --insecure-skip-tls-verify=true
    
      执行 kubectl 出现 `Unable to connect to the server: x509: certificate is valid for 10.20.x.x, 10.0.x.x, not 114.x.x.x `   添加跳过证书验证    `--insecure-skip-tls-verify=true` 
    

其他关联配置

修改主机名

hostnamectl set-hostname master

重新连接SSH主机名生效

Vim 无法粘贴

vim /usr/share/vim/vim90/defaults.vim

大约84行位置 set mouse=a 改为 set mouse-=a

查看Debain发行版本

lsb_release -a

Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm

SSH 免密登入

本机执行

ssh-keygen -t rsa
# 秘钥同步到服务
ssh-copy-id root@10.0.20.3

常见错误处理

更新源证书错误 NO_PUBKEY B53DC80D13EDEF05

Err:6 https://mirrors.tuna.tsinghua.edu.cn/kubernetes/apt kubernetes-xenial InRelease

The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY B53DC80D13EDEF05

  • 安装证书需要依赖

    apt-get install apt-transport-https ca-certificate curl gnupg2 software-properties-common -y
    
  • 获取公钥: 你需要获取缺失的公钥。在这个例子中,公钥是 B53DC80D13EDEF05。你可以使用以下命令获取公钥:

    gpg --recv-keys --keyserver keyserver.ubuntu.com B53DC80D13EDEF05
    

    如果你在防火墙或代理的后面,可能需要配置一下 GPG 来使用代理:

    gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B53DC80D13EDEF05
    
  • 将公钥添加到系统: 下载公钥后,将其添加到 APT 的密钥环中:

    gpg --export --armor B53DC80D13EDEF05 | sudo apt-key add -
    

    或者,如果你使用的是较新的 Ubuntu | Debian 版本,可以使用以下命令:

    gpg --export --armor B53DC80D13EDEF05 | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
    
  • 更新 APT: 更新 APT 包列表,以确保你的系统可以识别并使用新添加的密钥:

    sudo apt-get update
    
  • 重新尝试安装: 现在,你应该能够重新尝试安装 Kubernetes 包:

    sudo apt-get install -y kubelet kubeadm kubectl
    
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐