Ubuntu22安装K8s(外网环境)

关于docker和k8s及组件的安装及安装源设置可以参考阿里云

docker安装:docker-ce镜像_docker-ce下载地址_docker-ce安装教程-阿里巴巴开源镜像站

k8s源及组件:kubernetes镜像_kubernetes下载地址_kubernetes安装教程-阿里巴巴开源镜像站

注意:命令未说明哪台主机即所有节点

1. 安装docker

卸载旧版本

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

1.1. 使用apt存储安装

# 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

1.2. 安装docker包

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

1.3. 安装后设置

1.3.1. 设置开机启动
sudo systemctl start docker
sudo systemctl enable docker
1.3.2. 以非root用户管理docker
  1. 创建docker组
    sudo groupadd docker
  2. 将当前用户添加到docker组
    sudo usermod -aG docker $USER
  3. 注销并重新登录

2. 安装kubeadm前配置

2.1. 关闭swap

sudo swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab

2.2. 修改系统内核参数

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

# 应用 sysctl 参数而不重新启动
sudo sysctl --system
# sysctl -p /etc/sysctl.d/k8s.conf 加载配置

2.3. 配置时间同步

apt install -y chrony
systemctl status chronyd
systemctl start chronyd
systemctl enable chronyd
date

2.4. 加载网桥过滤模块

sudo modprobe overlay
sudo modprobe br_netfilter
lsmod | grep overlay
lsmod | grep br_netfilter

2.5. 优化ulimit

cat > sudo /etc/security/limits.conf <<EOF
soft nofile 65535
hard nofile 65536
EOF
# 或者用此方法
vim /etc/security/limits.conf
soft nofile 65535
hard nofile 65536

执行 ulimit -n 65535 立即生效。

2.6. 配置ipvs模块

apt install ipset ipvsadm -y


# Ubuntu 
# 检查
lsmod | grep ip_vs
sudo modprobe ip_vs
 # 轮询调度算法
sudo modprobe ip_vs_rr 
# 加权轮询调度算法
sudo modprobe ip_vs_wrr 
# 最小连接数调度算法
sudo modprobe ip_vs_lc  

# 查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4

2.7. 安装及仓库配置

2.7.1. 更新索引并下载密钥

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

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg

# 下载签名密钥
sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

在低于 Debian 12 和 Ubuntu 22.04 的发行版本中,/etc/apt/keyrings 默认不存在。 应在 curl 命令之前创建它。

2.7.2. 添加仓库

此仓库仅包含适用于 Kubernetes 1.31 的软件包

# 此操作会覆盖 /etc/apt/sources.list.d/kubernetes.list 中现存的所有配置。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
2.7.2.1. 安装k8s组件

(1)安装kubelet kubeadm kubectl

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

(2)配置kubelet的cgroup - - 可选

systemctl stop kubelet
vi /etc/sysconfig/kubelet
# 修改为
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
2.7.3. 修改配置
vi /etc/containerd/config.toml
注释掉其中的:disabled_plugins = ["cri"]
systemctl daemon-reload
sudo systemctl restart containerd

2.8. 部署Kubernetes集群

2.8.1. 镜像下载(所有节点)

如果可以VPN上网,直接:

kubeadm config images pull
2.8.2. 集群初始化(master)
sudo kubeadm init \
    --pod-network-cidr=10.244.0.0/16 \
    --service-cidr=10.96.0.0/12 \
    --apiserver-advertise-address=192.168.226.70



# 创建必要文件,使非 root 用户可以运行 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 加入节点
kubeadm join 192.168.226.80:6443 --token jtkmbb.k47my5fsg12kymn2 --discovery-token-ca-cert-hash sha256:266f68e2e53c96b1cbcb774a779b3c1e975a1fb17c7b8e00f63b97db8f740e37 --node-role=worker
2.8.3. 安装网络插件
# 获取flannel配置文件
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
# 使用配置文件启动flannel
kubectl apply -f kube-flannel.yml
2.8.4. 查看节点信息
kubectl get nodes

3. 问题处理

3.1. 节点无法使用kubectl命令

将master节点下/etc/kubernetes/admin.conf文件下传到其他节点

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

3.2. 查看镜像

当前k8s使用的容器进行时为containerd,所以使用docker命令无法查看

使用命令:crictl images可查看

告警信息处理

编辑文件 vi /etc/crictl.yaml

runtime-endpoint: unix:///run/containerd/containerd.sock
<think>嗯,用户现在问的是在Ubuntu上部署Kubernetesk8s)。首先,我需要回忆一下之前的对话历史。之前用户询问过如何关闭SELinux,而我的回答指出Ubuntu默认使用AppArmor,而不是SELinux。现在用户转向部署k8s,可能是在搭建容器化环境,所以需要确保他们对容器和集群管理有基本了解。 首先,我应该考虑用户可能的背景。他们可能刚开始接触Kubernetes,或者在Ubuntu服务器上搭建集群进行开发或测试。用户可能不太清楚具体的步骤,所以需要详细但清晰的指导。同时,要避免使用过于专业的术语,或者至少解释清楚每个步骤的目的。 接下来,我需要整理部署Kubernetes的基本步骤。通常包括安装容器运行时(如containerd或Docker)、安装kubeadm、kubelet和kubectl,然后初始化控制平面,加入节点,最后安装网络插件。这些都是标准流程,但需要针对Ubuntu系统进行调整,比如使用apt包管理器。 还需要注意常见的配置点,比如关闭swap,设置hostname,修改sysctl参数,配置cgroup驱动等。这些都是部署过程中容易出错的地方,必须详细说明,否则用户可能会遇到问题。比如,在之前的回答中,用户可能需要关闭SELinux,但Ubuntu默认没有,所以这里要确认是否还有其他安全模块需要处理,比如AppArmor,是否需要调整策略?不过通常在k8s部署中,可能需要关闭swap,而不是安全模块,但具体情况可能不同。 另外,用户可能是在单节点上尝试部署,比如使用all-in-one的集群,或者希望搭建多节点集群。因此,可能需要分情况说明,或者给出单节点部署的选项,比如使用--pod-network-cidr参数时选择适合的网络插件,比如Flannel或Calico。 还要考虑版本兼容性问题。不同版本的Kubernetes对Docker或containerd的支持可能不同,需要指出具体的版本要求,或者建议用户使用官方推荐的版本。例如,使用kubeadm的特定版本,可能需要containerd的配置调整,比如修改/etc/containerd/config.toml中的systemd cgroup驱动。 另外,初始化控制平面后,kubeadm join命令如何生成,节点加入时的token问题,如何处理token过期等,这些都需要在步骤中提及,或者给出解决方法的提示,比如如何生成新的token。 最后,验证集群是否正常运行,包括检查节点状态,部署测试应用,以及安装网络插件的必要性,比如Flannel的kubectl apply命令。同时,提醒用户常见的故障点,比如网络插件未安装导致pod处于Pending状态,或者防火墙规则阻止通信等。 可能还需要给出一些优化建议,比如使用国内镜像源加速拉取镜像,或者使用kubeadm的配置文件进行更细致的控制。此外,安全方面的考虑,比如生产环境中需要配置更严格的安全策略,但测试环境可能可以放宽。 总结下来,回答的结构应该是分步骤的,每一步明确要执行的命令和配置,同时解释每个步骤的作用,以及可能遇到的问题和解决方法。要确保用户能够按步骤操作,并且在遇到问题时能够根据提示进行排查。</think>以下是在 **Ubuntu 系统上部署 Kubernetesk8s集群**的详细步骤,涵盖单节点(All-in-One)和多节点集群的部署方法: --- ### 一、环境准备 #### 1. **系统要求** - **Ubuntu 版本**:20.04 LTS 或更高(推荐 22.04 LTS) - **硬件配置**: - 控制平面(Master):至少 2 CPU、2GB 内存、10GB 磁盘 - 工作节点(Worker):至少 1 CPU、1GB 内存 - **网络要求**: - 所有节点间网络互通,且能访问外网(拉取镜像)。 - 关闭防火墙或开放端口(6443、2379、10250 等)。 #### 2. **配置所有节点** ```bash # 1. 禁用 Swap(Kubernetes 要求) sudo swapoff -a # 临时关闭 sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 永久关闭 # 2. 设置主机名和 hosts(可选) sudo hostnamectl set-hostname master # 主节点设为 master sudo hostnamectl set-hostname node1 # 工作节点设为 node1 # 3. 加载内核模块 cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # 4. 配置 sysctl 参数 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sudo sysctl --system ``` --- ### 二、安装容器运行时(Containerd) #### 1. **安装 Containerd** ```bash # 1. 安装依赖 sudo apt-get update sudo apt-get install -y curl gnupg2 software-properties-common # 2. 添加 Docker 仓库(Containerd 通过 Docker 仓库安装) curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 3. 安装 Containerd sudo apt-get update sudo apt-get install -y containerd.io # 4. 配置 Containerd 使用 systemd cgroup 驱动 sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml > /dev/null sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml sudo systemctl restart containerd ``` --- ### 三、安装 Kubernetes 组件 #### 1. **添加 Kubernetes 仓库** ```bash sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list ``` #### 2. **安装 kubeadm、kubelet、kubectl** ```bash sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl # 阻止自动更新 ``` --- ### 四、初始化控制平面(Master 节点) #### 1. **初始化集群** ```bash sudo kubeadm init \ --pod-network-cidr=10.244.0.0/16 \ --image-repository=registry.aliyuncs.com/google_containers # 使用阿里云镜像加速 ``` #### 2. **配置 kubectl** ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` --- ### 五、安装网络插件(如 Flannel) ```bash kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml ``` --- ### 六、加入工作节点(Worker 节点) 在 Worker 节点上执行以下命令(从 Master 节点的 `kubeadm init` 输出中获取): ```bash sudo kubeadm join <Master-IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash> ``` --- ### 七、验证集群状态 ```bash kubectl get nodes # 查看节点状态(应显示 Ready) kubectl get pods -A # 检查所有 Pod 是否运行正常 ``` --- ### 八、可选优化 1. **单节点部署(All-in-One)** 若只有单节点,允许 Master 节点调度 Pod: ```bash kubectl taint nodes --all node-role.kubernetes.io/control-plane- ``` 2. **镜像加速** 编辑 `/etc/containerd/config.toml`,在 `[plugins."io.containerd.grpc.v1.cri".registry.mirrors]` 下添加: ```toml [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://registry.cn-hangzhou.aliyuncs.com"] ``` --- ### 常见问题 - **镜像拉取失败**:手动拉取镜像并重新打标签: ```bash ctr -n k8s.io images pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.0 ctr -n k8s.io images tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.0 registry.k8s.io/kube-apiserver:v1.28.0 ``` - **节点 NotReady**:检查网络插件是否安装,或查看日志: ```bash journalctl -u kubelet -f ``` --- 通过以上步骤,你可以在 Ubuntu 上快速部署一个功能完整的 Kubernetes 集群
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值