Ubnutu 部署 k8s 的一个坑

本文记录了在Ubuntu 14.04上部署K8S遇到的问题及其解决过程。主要问题是由于docker api版本过低导致K8S无法正常启动。文章详细描述了解决方案,包括安装docker engine而非docker.io,确保docker api版本大于等于1.2。

1.背景

在Ubnutu14.04 上部署K8S过程大致如下:

1.执行apt-get update 和 apt-upgrade

2.配置apt的代理(公司网络通过代理上网)

3.通过apt-get install docker.io方式安装docker

4.编译k8s,以本地模式启动

2.问题

发现无法正常启动,无法执行kubectl 命令,日志中包含的错误信息为:某个资源在Busy状态,并且无法删除。最终跟踪到apiserver.log,controller.log和scheduler.log发现docker的api version过低,原来k8s要求的docker 的 api version >= 1.2 这里需要注意的是,docker api version 并不是docker 的版本,通过 apt-get install docker.io的方式安装的docker版本为1.6,但是api version 却是1.1,倒是k8s无法正常启动。

3.解决方案

安装docker engine,而不是docker.io,执行apt-get install docker-engine

docker engine 的 相关信息如下:

root@ubuntu:~# docker version
Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.3
 Git commit:   a34a1d5
 Built:        Fri Nov 20 17:56:04 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.3
 Git commit:   a34a1d5
 Built:        Fri Nov 20 17:56:04 UTC 2015
 OS/Arch:      linux/amd64
root@ubuntu:~# 
或者使用lxc-docker 也可以,只需要api version 版本 >= 1.2 即可


### 安装和配置Kubernetes集群 #### 添加必要的APT仓库并更新包列表 为了确保能够顺利获取所需的软件包,在开始之前需先添加阿里云的Docker存储库至系统的APT源: ```bash sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" echo "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" >> /etc/apt/sources.list ``` 接着,为安装`kubeadm`, `kubelet` 和 `kubectl`做准备,执行如下命令来导入Google Cloud APT密钥,并创建一个新的APT源文件用于Kubernetes组件: ```bash curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list ``` 完成上述操作后,刷新本地APT缓存以便于后续安装最新版本的相关工具。 #### 配置网络模块与转发设置 为了让容器间的通信正常工作,需要加载内核模块`br_netfilter`以及开启IPv4数据包转发功能: ```bash sudo modprobe br_netfilter echo '1' | sudo tee /proc/sys/net/ipv4/ip_forward ``` 这一步骤对于构建高可用性的Kubernetes环境至关重要[^3]. #### 初始化主节点 当一切就绪之后,可以利用`kubeadm init`指令启动集群初始化过程。这里假设正在使用的操作系统是Ubuntu 22.04 LTS,并且指定了特定参数如API服务器监听地址、镜像仓库位置等信息: ```bash sudo kubeadm init \ --apiserver-advertise-address=<MASTER_NODE_IP> \ --image-repository=registry.aliyuncs.com/google_containers \ --kubernetes-version=v1.28.7 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16 \ --cri-socket=unix:///run/containerd/containerd.sock ``` 请注意替换其中的<MASTER_NODE_IP>为主节点的实际IP地址[^4]. 此外,考虑到不同环境中可能存在差异化的CRI(COntainer Runtime Interface),因此也一并设置了相应的套接字路径. #### 加入其他节点到集群 一旦成功建立了控制平面(即完成了主节点的初始化),就可以让其余的工作节点加入进来形成完整的集群结构了。此过程中需要用到由`kubeadm init`输出的一串令牌字符串及其对应的CA证书哈希值;如果错过了该信息,则可以通过查看/var/lib/kubelet/pki下的bootstrap-kubeconfig文件重新获得连接所需的数据。 ```bash sudo kubeadm join <CONTROL_PLANE_HOST>:6443 --token <TOKEN> \ --discovery-token-ca-cert-hash sha256:<HASH> ``` 以上就是整个基于Ubuntu平台下部署Kubernetes集群的大致流程概述.
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值