Ubuntu 22.04系统安装部署Kubernetes v1.29.13集群

Ubuntu 22.04系统安装部署Kubernetes v1.29.13集群

  • 简介
    • Kubernetes 的工作流程概述
    • Kubernetes v1.29.13 版本
    • Ubuntu 22.04 系统安装部署 Kubernetes v1.29.13 集群
  • 1 环境准备
    • 1.1 集群IP规划
    • 1.2 初始化步骤(各个节点都需执行)
      • 1.2.1 主机名与IP地址解析
      • 1.2.2 关闭swap
      • 1.2.3 禁用防火墙
      • 1.2.4 时钟同步
      • 1.2.5 配置内核转发和网桥过滤
    • 1.3 安装 Kubernetes 必备组件
      • 1.3.1 安装 Docker 或 containerd 作为容器运行时
        • 方法一:Docker+cri-dockerd
        • 方法二:Containerd
      • 1.3.2 安装 kubeadm、kubelet 和 kubectl
  • 2 MASTER节点初始化
    • 2.1 主节点初始化
    • 2.2 初始化master主节点
  • 3 Woker节点配置及添加
    • 3.1 节点添加
    • 3.2 验证集群状态
  • 4 部署Web应用测试

简介

Kubernetes(简称 K8s)是一个开源的容器编排平台,它能够自动化地部署、扩展和管理容器化应用。Kubernetes 支持的容器运行时包括 Docker 和 containerd 等。它通过提供集群管理、服务发现、负载均衡、自动扩展等功能,极大地简化了容器化应用的管理。

Kubernetes 的主要组件包括:

  1. Master 节点(控制平面)

    • API Server:Kubernetes 控制平面的入口,所有的 API 请求都会经过它,它负责协调集群中的各项操作。
    • Scheduler:负责监控集群中的资源情况,并将 Pod 调度到合适的节点上。
    • Controller Manager:负责执行集群控制的任务,确保集群中各项资源处于预期状态。
    • etcd:一个分布式键值存储,用于保存所有集群的数据和状态。
  2. Node 节点(工作节点)

    • Kubelet:每个节点上运行的代理,负责管理容器的生命周期,确保容器的运行状态与 API Server 中的描述一致。
    • Kube Proxy:负责服务发现和负载均衡,代理集群中的网络流量到正确的 Pod 上。
    • Container Runtime:容器运行时,通常是 Docker 或 containerd,负责启动和管理容器。
  3. Pod:是 Kubernetes 中最小的可调度单位,可以理解为一个容器或多个容器的集合,容器共享网络和存储资源。

  4. Deployment:管理 Pod 的副本集,自动创建、删除、滚动更新 Pods。

  5. Service:为一组 Pod 提供一个稳定的访问入口,通常通过 DNS 名称来访问。

  6. Namespace:将集群资源分隔成不同的虚拟集群,支持多租户。

Kubernetes 的工作流程概述

  • 容器化应用的部署:在 Kubernetes 中,首先需要定义一个包含应用容器的 Pod,指定应用的镜像、存储卷、网络策略等。
  • 调度和管理:Scheduler 会选择一个合适的 Node 节点来部署这个 Pod,Kubelet 会在节点上启动容器,并向 API Server 报告状态。
  • 服务发现与负载均衡:当多个 Pod 运行在不同的节点上时,Kubernetes 的 Service 会为它们提供一个统一的访问入口,实现负载均衡。

Kubernetes v1.29.13 版本

Kubernetes 版本 1.29.13 作为一个较新的版本,提供了一些改进和新特性,主要关注稳定性、性能和安全性等方面。每个版本都会修复已知的问题并加入一些增强功能。升级到这个版本的集群,可以享受到更好的性能表现和更稳定的运行环境。


Ubuntu 22.04 系统安装部署 Kubernetes v1.29.13 集群

以下是部署 Kubernetes 集群的概念步骤:

  1. 准备环境

    • 操作系统:Ubuntu 22.04 是一个长期支持(LTS)版本,适用于生产环境。
    • 硬件要求:至少有两台服务器,一台作为 Master 节点,至少一台作为 Worker 节点。
    • 网络:确保集群的节点之间可以通信,必要时配置防火墙和端口转发。
  2. 安装 Kubernetes 必备组件

    • 安装 Docker(此篇选择docker+cri-dockerd)containerd 作为容器运行时。
    • 安装 kubeadmkubeletkubectl 这些 Kubernetes 组件。
  3. 初始化 Master 节点

    • 使用 kubeadm init 初始化 Kubernetes 集群的控制平面。
    • 配置 kubectl,使得控制节点可以管理集群。
  4. 加入 Worker 节点

    • 在 Worker 节点上运行 kubeadm join 命令,加入到已经初始化的 Master 节点。
  5. 配置网络插件

    • Kubernetes 需要网络插件来管理 Pod 之间的网络通信,常用的插件有 CalicoFlannel(推荐)Weave 等。
    • 安装并配置网络插件。
  6. 验证集群

    • 使用 kubectl get nodes -owide 检查集群节点详细状态,确保 Master 节点和 Worker 节点都处于 Ready 状态。
  7. 部署应用

    • 创建 Deployment、Service 等资源,部署容器化应用。

1 环境准备

#使用kubeadm部署Kubernetes集群的前提条件支持Kubernetes运行的Linux主机,例如Debian、RedHat及其变体等每主机2GB以上的内存,以及2颗以上的CPU各主机间能够通过网络正常通信,支持各节点位于不同的网络中独占的hostname、MAC地址以及product_uuid,主机名能够正常解析放行由Kubernetes使用到的各端口,或直接禁用iptables禁用各主机的上的Swap设备各主机时间同步
#准备代理服务,以便接入registry.k8s.io,或根据部署过程提示的方法获取相应的Image
#重要提示kubeadm不仅支持集群部署,还支持集群升级、卸载、更新数字证书等功能目前,kubeadm为各节点默认生成的SSL证书的有效期限为1年,在到期之前需要renew这些证书

1.1 集群IP规划

1、OS: Ubuntu 22.04 LTS
2、Docker:27.0,CGroup Driver: systemd
3、Kubernetes:v1.29.13

  • CRI: cri-dockerd, CNI: CoreOS Flannel

4、网络环境

  • 节点网络:11.0.1.0/16
  • Pod网络:10.244.0.0/16
  • Service网络:10.96.0.0/12
系统版本IP主机hosts
Ubuntu 22.0411.0.1.100k8s-master01.dinginx.org k8s-master01 kubeapi.dinginx.org kubeapi
Ubuntu 22.0411.0.1.101k8s-node01.dinginx.org k8s-node01
Ubuntu 22.0411.0.1.102k8s-node02.dinginx.org k8s-node02
Ubuntu 22.0411.0.1.103k8s-node03.dinginx.org k8s-node03

1.2 初始化步骤(各个节点都需执行)

1.2.1 主机名与IP地址解析

cat >> /etc/hosts <<EOF
11.0.1.100 k8s-master01.dinginx.org k8s-master01 kubeapi.dinginx.org k8sapi.dinginx.org kubeapi
11.0.1.101 k8s-node01.dinginx.org k8s-node01
11.0.1.102 k8s-node02.dinginx.org k8s-node02
11.0.1.103 k8s-node03.dinginx.org k8s-node03
EOF

1.2.2 关闭swap

sed -i '/swap/s/^/# /' /etc/fstab && swapoff -a#检验
root@ubuntu2204:~# free -htotal        used        free      shared  buff/cache   available
Mem:           1.9Gi       320Mi       431Mi       1.0Mi       1.2Gi       1.4Gi
Swap:             0B          0B          0B

1.2.3 禁用防火墙

apt install ufw
ufw disable
ufw status

1.2.4 时钟同步

#更改时区
timedatectl set-timezone Asia/Shanghai#安装Chrony包
apt install chrony -y
##修改配置文件
cat <<EOF | tee /etc/chrony.conf
server ntp.aliyun.com iburst
stratumweight 0
driftfile /var/lib/chrony/drift
rtcsync
makestep 10 3
bindcmdaddress 127.0.0.1
bindcmdaddress ::1
keyfile /etc/chrony.keys
commandkey 1
generatecommandkey
logchange 0.5
logdir /var/log/chrony
EOF

1.2.5 配置内核转发和网桥过滤

#添加网桥过滤和内核转发配置文件
cat >> /etc/sysctl.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward=1
br_netfilter
overlay
EOF
##刷新配置
sysctl --system#检查
lsmod

1.3 安装 Kubernetes 必备组件

1.3.1 安装 Docker 或 containerd 作为容器运行时

方法一:Docker+cri-dockerd
#安装docker及依赖
apt-get update
apt-get install ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings##使用国内源
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullapt update && apt install -y docker-ce#安装cri-dockerd
curl -LO https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.15/cri-dockerd_0.3.15.3-0.ubuntu-jammy_amd64.deb
dpkg -i cri-dockerd_0.3.15.3-0.ubuntu-jammy_amd64.deb
systemctl enable --now cri-docker
方法二:Containerd
#下载软件包
wget https://github.com/containerd/containerd/releases/download/v1.7.24/containerd-1.7.24-linux-amd64.tar.gz
dpkg -i containerd-1.7.24-linux-amd64.tar.gz#创建配置文件
mkdir /etc/containerd/#生成配置文件
containerd conifg default > /etc/containerd/config.toml #修改67行内容
sed -i 's/registry.k8s.io\/pause:3.8/registry.k8s.io\/pause:3.9/' /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/ /etc/containerd/config.toml	
#启动containerd服务
systemctl enable --now containerd.service
[root@ubuntu2204 ~]# ls /var/run/containerd/ -l
total 0
srw-rw---- 1 root root  0 Dec  9 11:05 containerd.sock		#若未启动则无此文件
srw-rw---- 1 root root  0 Dec  9 11:05 containerd.sock.ttrpc
drwx--x--x 2 root root 40 Dec  9 11:05 io.containerd.runtime.v1.linux
drwx--x--x 2 root root 40 Dec  9 11:05 io.containerd.runtime.v2.task[root@ubuntu2204 ~]# containerd --version
containerd containerd.io 1.7.23 57f17b0a6295a39009d861b89e3b3b87b005ca27##nerdctl工具可单独运行容器
wget https://github.com/containerd/nerdctl/releases/download/v2.0.2/nerdctl-2.0.2-linux-amd64.tar.gz
tar zxvf nerdctl-2.0.2-linux-amd64.tar.gz -C /usr/local/
cp /usr/local/bin/nerdctl /usr/bin/
#检验
[root@ubuntu2204 ~]# nerdctl --version
nerdctl version 2.0.2
[root@ubuntu2204 ~]# nerdctl --help
nerdctl is a command line interface for containerdConfig file ($NERDCTL_TOML): /etc/nerdctl/nerdctl.tomlUsage: nerdctl [flags]helpers.Management commands:......

1.3.2 安装 kubeadm、kubelet 和 kubectl

#安装部署kubelet、kubectl、kubeadm
##使用清华源  apt-cache madison kubeadm 查看软件版本
apt update && apt-get install -y apt-transport-https
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/kubernetes/core:/stable:/v1.31/deb/ /" |tee /etc/apt/sources.list.d/kubernetes.list
apt update && apt install -y kubelet kubeadm kubectl#锁定版本防止自动升级
apt-mark hold kubelet kubeadm kubectl
#解除锁定 apt-mark unhold kubelet kubeadm kubectl#修改配置文件
sed -in.bak  '/^ExecStart/c ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-cache-dir=/var/lib/cni/cache --cni-conf-dir=/etc/cni/net.d' /lib/systemd/system/cri-docker.servicesystemctl daemon-reload && systemctl restart cri-docker.service#1.30版本以后kubelet配置在/etc/default/kubelet下
cat << EOF | tee /etc/default/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/var/run/cri-dockerd.sock"
EOF#适用1.29及以前版本
mkdir -pv /etc/sysconfig/ && echo 'KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/var/run/cri-dockerd.sock"' |tee /etc/sysconfig/kubelet#设置开机自启动
systemctl enable kubelet

2 MASTER节点初始化

2.1 主节点初始化

kubeadm config images list
kubeadm config images list --image-repository=registry.aliyuncs.com/google_containers
docker image pull registry.aliyuncs.com/google_containers/pause:3.9
docker image tag registry.aliyuncs.com/google_containers/pause:3.9 registry.k8s.io/pause:3.9kubeadm config images pull \--image-repository=registry.aliyuncs.com/google_containers \--cri-socket unix:///var/run/cri-dockerd.sockkubeadm init --control-plane-endpoint="kubeapi.dinginx.org" --kubernetes-version=v1.29.11 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --token-ttl=0 --cri-socket unix:///run/cri-dockerd.sock  --image-repository=registry.aliyuncs.com/google_containers

2.2 初始化master主节点

#初始化master主节点
root@k8s-master01:~# kubeadm init \--control-plane-endpoint="kubeapi.dinginx.org" \--kubernetes-version=v1.29.13 \--pod-network-cidr=10.244.0.0/16 \--service-cidr=10.96.0.0/12 \--token-ttl=0 \--cri-socket unix:///var/run/cri-dockerd.sock \--image-repository=registry.aliyuncs.com/google_containers		#使用阿里云镜像......	# 显示如下内容表示节点初始化成功[addons] Applied essential addon: kube-proxyYour Kubernetes control-plane has initialized successfully!# 第1个步骤提示, Kubernetes集群管理员认证到Kubernetes集群时使用的kubeconfig配置文件
To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou 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/You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:kubeadm join kubeapi.dinginx.org:6443 --token lk5whx.00xug3dwizebomql \--discovery-token-ca-cert-hash sha256:03a18aaca2f33be62f131f7cc111af1c541489519d86254f0d053777f54eb6bf \--control-plane Then you can join any number of worker nodes by running the following on each as root:kubeadm join kubeapi.dinginx.org:6443 --token lk5whx.00xug3dwizebomql \--discovery-token-ca-cert-hash sha256:03a18aaca2f33be62f131f7cc111af1c541489519d86254f0d053777f54eb6bf #复制认证为Kubernetes系统管理员的配置文件至目标用户(例如当前用户root)的家目录下
[root@master01 ~]# mkdir .kube
[root@master01 ~]# cp /etc/kubernetes/admin.conf .kube/config## 或者可复制到其他worker节点赋予管理员权限
[root@k8s-node01 ~]#mkdir -p ~/.kube
[root@k8s-master01 ~]# scp -i /etc/kubernetes/admin.conf 11.0.1.11:~/.kube/config#显示信息证明配置成功
root@master01:~# kubectl config view --raw
apiVersion: v1
clusters:
- cluster:certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCVENDQWUyZ0F3SUJBZ0lJRnM5c0xMaitZV0F3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TlRBeE16QXhNVFF4TVRWYUZ3MHpOVEF4TWpneE1UUTJNVFZhTUJVeApFekFSQmdOVkJBTVRDbXQxWW1WeWJtVjBaWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUUM2aVpEa00xbWFjd3lvcVpEdlVXVndReUhBbkQzd2M1dTF4VjRpNEMyVDFQQ1E2cXZuaDZCZUFCOWoKVXdFV2R0dnFpMllBYnEyMnExZ0t3NXMvSml1dGpHZFNiUkdseVYwY3JGVHNqV2lyVzdacWhTbzdMdHV5SXBDRwpnVU0xNEVUanFkMDIwNlZaajRWaU9PQjYwd3VlOEZXLzR4eXlvMzBudURsT0RCLzQyWjVVclhsdDhKU242WURSClhua2d5ZnZqR1BMS3JaMWp6d0kzWDJRblVHaURqUGdaVWduQkJveFp5Q1QvZTR5SlFGY2xHV2NZK2pEQ2NMMlkKN3hZVDl2ckN6SE54eVlpanQ0SWtSRkd5R0FxSXFacWNCaTcwTHdrNWdpQnNwblBLUllDeGxlN0xjNHdjbVpKcgpFbFJJU08wT3lMUXFleWtzc1hVQkJPTGhVMTVMQWdNQkFBR2pXVEJYTUE0R0ExVWREd0VCL3dRRUF3SUNwREFQCkJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJSL3BJUTVrSWdjaEdzNE9QR2JWdFNzU2w4TmtqQVYKQmdOVkhSRUVEakFNZ2dwcmRXSmxjbTVsZEdWek1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQnExU2VFdlRrQQpjNmQ2ZVFUejd1dVc2Y0lhT0pFdy9XcWk5NDF5eit5L1N3YS93dGJ5QVgwc3pxMklPc0JlcTFiL05BQTV3TnR0Cmc1dlV1ajJGa1FlbGRVWnVWYXBFV0VDYjAyMjFZdHY3NS9zTlRMcTJudlpLN0orb3BOZG5qNHFjZXlTKzlmaXgKUEVMa3AyUnU1ZUZveFlhblZwck12UHlyRG5wbktRWk5mT2lxZDcrcXlreWRVNHR2ZFh4Z0NiSnpoWXJzbE1PYQoycTIvWVpIQ1d0UHdaZklhRTR3bnJvVlJUVzJ1MWJKZEh4QzRjMkRhSDljZkhMWllRZ3E4cmk5aUxKNlZNYUNWCkEzd3BVNFhYazVDVTVwdm0waVpkbEkvdFNKSDdUaWFCYXRMZTB0L1cwbjV6R0w1b0FZUFp4TmlKNi9YTktaZ3gKREFEdFBYMjJFeU42Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0Kserver: https://kubeapi.dinginx.org:6443name: kubernetes
contexts:
- context:cluster: kubernetesuser: kubernetes-adminname: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-adminuser:client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURLVENDQWhHZ0F3SUJBZ0lJQ2RLK21nM2ZYcjB3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TlRBeE16QXhNVFF4TVRWYUZ3MHlOakF4TXpBeE1UUTJNVFphTUR3eApIekFkQmdOVkJBb1RGbXQxWW1WaFpHMDZZMngxYzNSbGNpMWhaRzFwYm5NeEdUQVhCZ05WQkFNVEVHdDFZbVZ5CmJtVjBaWE10WVdSdGFXNHdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDdEtEMFUKa3NsWUpBR1o4bFE5UFdsZTc4UU84NVgxbU5vRUo3RURub3pFa05iOXNCbkl1WnJ5NVpYUXpMNndJbkMwVUFaYgpDS2RvL2h6SU5GLy9ySHhmQmhFVkNnN044WExmZ0FXbjMvM09PejlXRnlnOWViamdmNmpUVTBydHRHYkJCdS9xCjBiL2RpNnorV0ZtamhQWTBYZnpCMXFuMThkYjRRRmdoRFlzaTZiTk4ycEtuc3RLNGtYVFI2K05RK1Z4RGo4TTgKRVJLWjVDOGZMRmJuSExnRkxBdXY2YTZEQy9YZ0lHdlBUWGd1UitzWmpmVEQxWkQwdUUrTDZuOTBOcGM2U1FacAo4THR6M1g1LzJnRStrclpjMEtYcTl5VlBodVJIY1dxVHQ1clNRZXhTWit4RCt0Z3pzR3FFNm5rQnhVYlAzY3VpCld6WkQ1cURmWTRTUlpkM1hBZ01CQUFHalZqQlVNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUsKQmdnckJnRUZCUWNEQWpBTUJnTlZIUk1CQWY4RUFqQUFNQjhHQTFVZEl3UVlNQmFBRkgra2hEbVFpQnlFYXpnNAo4WnRXMUt4S1h3MlNNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUNPM2RFZVpCK25OOVVGSnBWTUU1TVc1dlJyCklJdjlzODR3NWdTT0dUTlVTaVRlSFFUYVByTHppT2luRXE1RzNRMXZKNTh3TFNwdHNlWVo5R2xHK1dpM2Q5RzEKSFJoejcwRW9OSVFqWjEwMWNyMnpkMUFwVkR3aUlMczg5VG5WTzJyOGtFcS9GZ2hYYmtuaXhhZGJ0OERFVUxSbQpUaTlsTFQ5aDMva1pWQnFoVUJFcndjTmxWbkJrL1dIQ0lENjFGZHBVNFdEY0pQZzQxeCszdWkrTS9QVGJKV0c1CmZIOEtCdTdSWS9yMFFxbXVCREw5M1h4enRQOFJpaTgycUdTZ0tobXVnc0dPeEpXV2hSU0M1VzV5elBNcTh2eEYKQ2czSlZaU09tVGVZQkI1TW5RLzdjaDZuWjZvZEh1ZnZzcWEwQXZVeW1vUXo3Y3lKbURBNXo1VHoxMGhhCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0Kclient-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBclNnOUZKTEpXQ1FCbWZKVVBUMXBYdS9FRHZPVjlaamFCQ2V4QTU2TXhKRFcvYkFaCnlMbWE4dVdWME15K3NDSnd0RkFHV3dpbmFQNGN5RFJmLzZ4OFh3WVJGUW9PemZGeTM0QUZwOS85empzL1ZoY28KUFhtNDRIK28wMU5LN2JSbXdRYnY2dEcvM1l1cy9saFpvNFQyTkYzOHdkYXA5ZkhXK0VCWUlRMkxJdW16VGRxUwpwN0xTdUpGMDBldmpVUGxjUTQvRFBCRVNtZVF2SHl4VzV4eTRCU3dMcittdWd3djE0Q0JyejAxNExrZnJHWTMwCnc5V1E5TGhQaStwL2REYVhPa2tHYWZDN2M5MStmOW9CUHBLMlhOQ2w2dmNsVDRia1IzRnFrN2VhMGtIc1VtZnMKUS9yWU03QnFoT3A1QWNWR3o5M0xvbHMyUSthZzMyT0VrV1hkMXdJREFRQUJBb0lCQUhSbTBHaThKRTMwSm45dQp2K0pMSGtLTHU2aXhadVdxMHlSbjZqOGNubFNsYVdFd3VLU080UExZRTFaQnpRNXFtSWtlSXFlZnNhcUs2SjVOClZ4dHd3RXJBc1VzTGI5aFJyMzgvZUkzWnJheXRkMjVRTXVUZ3ByK0VFZUc5NUdqWEZSdzlwWnFkVmZXQXA5SnoKWWc3aW12K3BEdmpmYlhIQUdWclpKbVZSelc2eHdHZDNqMUZtUjRFK0FmaEQ4TUJEMUZpYW5QbnBoSmNhUzlEdApHWnVUMUE3Z3g2R21kUlJ6RVZObGgvN01DdGpWUEM0WlhTSGtaL1lIeENnNlZHaXdQb1p5ZFhSaWxPS0VPZXNCCkJSNjZkaHNWRGtUVXJwbllXdTR1ZUVpVDIwcnNuQWk0RnVwemhOV2Q0STdXbFlLYnBMYzdJQXpSSy9iUDY2SmIKSXVXT0lRRUNnWUVBeXBjSjNyMHNjNmluYktXV2lTRDdnNXBRVEtIZ3lrQU0yV2FYQnYwWktGaFlmVlJzbTZWYwpqbCtNS1BOZ0Z2bUp3RVlLbThrWFNpR3VRSitJc0xqNkNIcFM1TkFpTzBtKzQ5UlQ3Z3ZXQzgzUXZ1S0NHb2p3CmFIVUxHSUZNN1k3cStMMkVMNDJybk1tVHNPaE1lQm9mZlJVako0Qkh0bFNDbFZSdDRnT0JTK2NDZ1lFQTJzN0IKZ2tOZnlFOVdBRHZySUE0ZmVjSEFrZDBMYlgxbzNkQnM1cDVsUnd3OEVPQnpVYWJzYUVGRmZtSUVTYk8rTDBVQQpHUmFnU0VCVWhFRTZkQVRqNmE5RVpEanQwelMyUTErTVRhM3RscFZ4WGg2MC9MN1VwNUx3RVlJTmZ1eGRSNWtNCnBhL0ppcXJDUmZrVld1VTVQeGN3OC9OTnlmemxUeXJKV1hsTElKRUNnWUVBam1LYldFWWk4T01QVU9nTXBqSmQKTTRDSWdXT2dwdVZmWW9pZEN4ZGwwQnBQano1LzJ1RGM3Vit3RmJQL3pBWDBVQU9xUHhXVlhjL1FOYkVxay9KZQpJUWxBSzNzeEkvUlB5cmFYaW80ZEVVekZNdlBsdHhxWnhRREdIS0g3M0ZiL1JIV0dheG1xRE5jTUMyRXBKWnhPCmwwMzgyQzFydVhVcUZpUXgycERXRmU4Q2dZQlNiUENZa2FqVFhJK1pKdms3NmhZUlY5dWpGeEhtL1FjMEIvLysKSUUwbXBvVTZGbE5hdnZidmp5Y09wUDNZaGMxdklSOFlWRjJzMmc3OGcxWHh2cVhjc2htaFo1Q3ZyM3U1aFpUawo3bEJDR2FuTE91WVRFQkFyMEQ1L1dlNmJrWTdTR2VXWnhNNjNYZnd4UDlPN21mNG10aVhLd0N6ZG1sY0hxNmFOCi9oTS9BUUtCZ1FDdkhYT3JvU1ROSmVGQlptalBBRmdUQXZUQW8zOW1yY0QxaUNDY1FHYyt2djNIL2NDK1B2bGUKZDI3OWE3L05wVDgxazhFL3FwS0VoN1NiZXdXaC9PcDViTWUvSHFtdXpIVWttRWo4c1Zibk5QSk1UcXB2dUhDRgo3VEx2TzdTcWRsa3N4THI1SlcwZzZtT3ZsK3J0L0RJVktyWk9iY1dwRE9lWnUwejRKZ25Eb0E9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=

3 Woker节点配置及添加

3.1 节点添加

kubeadm-init文件(每次初始化内容会不同,切记先进行保存)

kubeadm join kubeapi.dinginx.org:6443 --token lk5whx.00xug3dwizebomql \--discovery-token-ca-cert-hash sha256:03a18aaca2f33be62f131f7cc111af1c541489519d86254f0d053777f54eb6bf \--cri-socket unix:///run/cri-dockerd.sock

3.2 验证集群状态

#全部节点及namespace为running状态
root@k8s-node01:~# kubectl get nodes -owide
NAME                       STATUS   ROLES           AGE     VERSION    INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
k8s-master01.dinginx.org   Ready    control-plane   2d21h   v1.29.13   11.0.1.10     <none>        Ubuntu 22.04.2 LTS   5.15.0-131-generic   docker://27.5.1
k8s-node01.dinginx.org     Ready    <none>          2d21h   v1.29.13   11.0.1.11     <none>        Ubuntu 22.04.2 LTS   5.15.0-131-generic   docker://27.5.1
k8s-node02.dinginx.org     Ready    <none>          2d21h   v1.29.13   11.0.1.12     <none>        Ubuntu 22.04.2 LTS   5.15.0-131-generic   docker://27.5.1
k8s-node03.dinginx.org     Ready    <none>          2d21h   v1.29.13   11.0.1.13     <none>        Ubuntu 22.04.2 LTS   5.15.0-131-generic   docker://27.5.1

4 部署Web应用测试

#创建服务
root@k8s-master01:~# kubectl create namespace web01 --dry-run=client -oyaml > web01.yaml
root@k8s-master01:~# kubectl run -n web01 --image nginx  web01 --dry-run=client -oyaml >> web01.yaml
root@k8s-master01:~# kubectl create service nodeport web01 --tcp=80:80 --dry-run=client -oyaml >> web01.yaml#配置文件
root@k8s-master01:~# cat web01.yaml 
apiVersion: v1
kind: Namespace
metadata:name: web01
---
apiVersion: v1
kind: Pod
metadata:labels:app: web01name: web01namespace: web01
spec:containers:- image: nginxname: web01imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:labels:app: web01name: web01namespace: web01
spec:ports:- name: 80-80port: 80protocol: TCPtargetPort: 80selector:app: web01type: NodePortroot@k8s-master01:~# kubectl apply -f web01.yaml
root@k8s-master01:~# kubectl -n web01 get pod,svc
NAME        READY   STATUS    RESTARTS   AGE
pod/web01   1/1     Running   0          15mNAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/web01   NodePort   10.110.14.158   <none>        80:32717/TCP   15m#修改显示内容
root@k8s-master01:~# kubectl exec -it -n web01 pods/web01 -- bash -c "cat > /usr/share/nginx/html/index.html <<EOF
<h1>welcome to dinginx's website!</h1>
EOF"#查看services
root@k8s-node01:~# kubectl -n web01 get svc
NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
web01   NodePort   10.110.14.158   <none>        80:32717/TCP   43h

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的新闻资讯系统的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

【Linux系统】计算机世界的基石:冯诺依曼架构与操作系统设计

文章目录 一.冯诺依曼体系结构1.1 为什么体系结构中要存在内存&#xff1f;1.2 冯诺依曼瓶颈 二.操作系统2.1 设计目的2.2 系统调用与库函数 一.冯诺依曼体系结构 冯诺依曼体系结构&#xff08;Von Neumann Architecture&#xff09;是计算机的基本设计理念之一&#xff0c;由…

消息队列应用示例MessageQueues-STM32CubeMX-FreeRTOS《嵌入式系统设计》P343-P347

消息队列 使用信号量、事件标志组和线标志进行任务同步时&#xff0c;只能提供同步的时刻信息&#xff0c;无法在任务之间进行数据传输。要实现任务间的数据传输&#xff0c;一般使用两种方式&#xff1a; 1. 全局变量 在 RTOS 中使用全局变量时&#xff0c;必须保证每个任务…

【NLP251】Transformer精讲 残差链接与层归一化

精讲部分&#xff0c;主要是对Transformer的深度理解方便日后从底层逻辑进行创新&#xff0c;对于仅应用需求的小伙伴可以跳过这一部分&#xff0c;不影响正常学习。 1. 残差模块 何凯明在2015年提出的残差网络&#xff08;ResNet&#xff09;&#xff0c;Transformer在2016年…

Android学习制作app(ESP8266-01S连接-简单制作)

一、理论 部分理论见arduino学习-CSDN博客和Android Studio安装配置_android studio gradle 配置-CSDN博客 以下直接上代码和效果视频&#xff0c;esp01S的收发硬件代码目前没有分享&#xff0c;但是可以通过另一个手机网络调试助手进行模拟。也可以直接根据我的代码进行改动…

DeepSeek Janus-Pro:多模态AI模型的突破与创新

近年来&#xff0c;人工智能领域取得了显著的进展&#xff0c;尤其是在多模态模型&#xff08;Multimodal Models&#xff09;方面。多模态模型能够同时处理和理解文本、图像等多种类型的数据&#xff0c;极大地扩展了AI的应用场景。DeepSeek(DeepSeek-V3 深度剖析&#xff1a;…

OpenGL学习笔记(五):Textures 纹理

文章目录 纹理坐标纹理环绕方式纹理过滤——处理纹理分辨率低的情况多级渐远纹理Mipmap——处理纹理分辨率高的情况加载与创建纹理 &#xff08; <stb_image.h> &#xff09;生成纹理应用纹理纹理单元练习1练习2练习3练习4 通过上一篇着色部分的学习&#xff0c;我们可以…

代理模式——C++实现

目录 1. 代理模式简介 2. 代码示例 1. 代理模式简介 代理模式是一种行为型模式。 代理模式的定义&#xff1a;由于某些原因需要给某对象提供一个代理以控制该对象的访问。这时&#xff0c;访问对象不适合或者不能直接访问引用目标对象&#xff0c;代理对象作为访问对象和目标…

攻防世界 fileclude

代码审计 WRONG WAY! <?php include("flag.php"); highlight_file(__FILE__);//高亮显示文件的源代码 if(isset($_GET["file1"]) && isset($_GET["file2"]))//检查file1和file2参数是否存在 {$file1 $_GET["file1"];$fi…

Vue 响应式渲染 - 列表布局和v-html

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue 响应式渲染 - 列表布局和v-html 目录 列表布局 简单渲染列表 显示索引值 点击变色 V-html 作用 注意 采用策略 应用 总结 列表布局 简单渲染列表 Data中设置状态&#xff0c;是一个数组格式的默认信息。 然后…

LLMs之OpenAI o系列:OpenAI o3-mini的简介、安装和使用方法、案例应用之详细攻略

LLMs之OpenAI o系列&#xff1a;OpenAI o3-mini的简介、安装和使用方法、案例应用之详细攻略 目录 相关文章 LLMs之o3&#xff1a;《Deliberative Alignment: Reasoning Enables Safer Language Models》翻译与解读 LLMs之OpenAI o系列&#xff1a;OpenAI o3-mini的简介、安…

AI开发学习之——PyTorch框架

PyTorch 简介 PyTorch &#xff08;Python torch&#xff09;是由 Facebook AI 研究团队开发的开源机器学习库&#xff0c;广泛应用于深度学习研究和生产。它以动态计算图和易用性著称&#xff0c;支持 GPU 加速计算&#xff0c;并提供丰富的工具和模块。 PyTorch的主要特点 …

Python安居客二手小区数据爬取(2025年)

目录 2025年安居客二手小区数据爬取观察目标网页观察详情页数据准备工作&#xff1a;安装装备就像打游戏代码详解&#xff1a;每行代码都是你的小兵完整代码大放送爬取结果 2025年安居客二手小区数据爬取 这段时间需要爬取安居客二手小区数据&#xff0c;看了一下相关教程基本…

OpenCV:开运算

目录 1. 简述 2. 用腐蚀和膨胀实现开运算 2.1 代码示例 2.2 运行结果 3. 开运算接口 3.1 参数详解 3.2 代码示例 3.3 运行结果 4. 开运算应用场景 5. 注意事项 6. 总结 相关阅读 OpenCV&#xff1a;图像的腐蚀与膨胀-CSDN博客 OpenCV&#xff1a;闭运算-CSDN博客 …

JavaWeb入门-请求响应(Day3)

(一)请求响应概述 请求(HttpServletRequest):获取请求数据 响应(HttpServletResponse):设置响应数据 BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器就可访问,应用程序的逻辑和数据都存储在服务端(维护方便,响应速度一般) CS架构:Client/ser…

【SLAM】于AutoDL云上GPU运行GCNv2_SLAM的记录

配置GCNv2_SLAM所需环境并实现AutoDL云端运行项目的全过程记录。 本文首发于❄慕雪的寒舍 1. 引子 前几天写了一篇在本地虚拟机里面CPU运行GCNv2_SLAM项目的博客&#xff1a;链接&#xff0c;关于GCNv2_SLAM项目相关的介绍请移步此文章&#xff0c;本文不再重复说明。 GCNv2:…

罗格斯大学:通过输入嵌入对齐选择agent

&#x1f4d6;标题&#xff1a;AgentRec: Agent Recommendation Using Sentence Embeddings Aligned to Human Feedback &#x1f310;来源&#xff1a;arXiv, 2501.13333 &#x1f31f;摘要 &#x1f538;多代理系统必须决定哪个代理最适合给定的任务。我们提出了一种新的架…

团体程序设计天梯赛-练习集——L1-025 正整数A+B

一年之际在于春&#xff0c;新年的第一天&#xff0c;大家敲代码了吗&#xff1f;哈哈 前言 这道题分值是15分&#xff0c;值这个分&#xff0c;有一小点运算&#xff0c;难度不大&#xff0c;虽然说做出来了&#xff0c;但是有两个小疑点。 L1-025 正整数AB 题的目标很简单…

Leetcode:598

1&#xff0c;题目 2&#xff0c;思路 脑筋急转弯&#xff0c;看题目一时半会还没搞懂意思。 其实不然就是说ops是个矩阵集合&#xff0c;集合的每个矩阵有俩个元素理解为行列边距 m和n是理解为一个主矩阵&#xff0c;计算ops的每个小矩阵还有这个主矩阵的交集返回面积 3&…

web前端12--表单和表格

1、表格标签 使用<table>标签来定义表格 HTML 中的表格和Excel中的表格是类似的&#xff0c;都包括行、列、单元格、表头等元素。 区别&#xff1a;HTML表格在功能方面远没有Excel表格强大&#xff0c;HTML表格不支持排序、求和、方差等数学计算&#xff0c;主要用于布…