kubernetes 安装笔记
k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便。随着docker的大热,k8s当然也是随之风生水起,尤其是它有一个好爹google。
安装软件其实第一步还是去找官网,官网文档走不通再去找相关解决办法。其实安装过程其实官网说的很明白,遇到的主要问题都是网络问题,需要各种找办法解决。
环境说明
OS: Ubuntu 16.04(全新系统)
Docker: 18.06.1-ce
K8S: v1.12.2
更改源
考虑国内的网络环境,装完系统首先换源,在本次实践我选的中科大的镜像源,具体操作可以参etc见科大镜像源
sudo vim /etc/apt/sources.list
复制下面的代码覆盖原文件
# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
sudo apt update && sudo apt upgrade -y
sudo apt install vim -y
安装 docker
安装docker可以直接跟着官网走,唯一要注意的是还是网络,需要修改成国内源
sudo apt-get remove docker docker-engine docker.io
sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common首先卸载旧的docker(如果有的话),安装必要的依赖包
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
信任docker的GPG公钥,注意切换成科大的地址
sudo add-apt-repository “deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable”
添加docker的软件仓库,一样,注意修改成科大的地址
sudo apt update && sudo apt install docker-ce
安装docker
sudo usermod -aG docker $USER
加入docker用户组,以免以后操作docker都要sudo(可以省略这一步)
安装 kubernetes
安装kubeadm
参考官网,使用本地Ubuntu裸机搭建k8s集群,官网提供了kubeadm,可以一步步照着官网来,当然,由于网络问题,我们需要多费一番功夫。
curl -s http://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
这里同样需要改地址google是不可能访问到的(正常情况),科大的k8s镜像没有备份GPG公钥,于是更改成阿里云的镜像地址拿到k8s的GPG公钥
sudo vim /etc/apt/sources.list.d/kubernetes.list
复制下面代码到文件,添加科大的k8s源
deb http://mirrors.ustc.edu.cn/kubernetes/apt/ kubernetes-xenial main
sudo apt update && sudo apt install -y kubelet kubeadm kubectl
下载 kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
为了防止意外更新,锁住k8s相关包的更新
这里就安装好了相关包,由于使用的默认容器docker,不需要进行其他配置修改,如果使用非docker容器,具体配置请参看kubeadm
使用kubeadm搭建k8s集群
master
还是网络问题,这里修改的比较多,在网上找解决方案非常费时间,下面将展示具体怎么做。
sudo su
现在使用root权限干事,直接转换成root用户就好,免得后面一直sudo
swapoff -a
vim /etc/fstab # 注释swap所在的行禁用swap, k8s不支持swap
kubeadm init --pod-network-cidr=10.244.0.0/16
正常步骤参考kubeadm-init,当然因为网络问题,这一步基本上不会成功,需要绕路而行
在github上找到了有热心人士的k8s.gcr.io的镜像,和相关操作脚本anjia0532,在这里感谢这位老哥。
操作大致是从国内镜像下载k8s需要的docker包并改名字成k8s需要的格式,这样在init的时候就不用去 k8s.gcr.io 下,规避网络问题。
但是由于我对于稍微复杂的shell都看不太懂,于是用python改写了下:
#!/usr/bin/env python
# coding: utf-8
import os
# 参考 https://github.com/anjia0532/gcr.io_mirror
# 没办法,太菜,看不懂稍微复杂点的shell,只能舍近求远用python
url_prefix = "anjia0532/google-containers."
def get_k8s_image_name():
sh = os.popen("kubeadm config images list")
sh_out = sh.read()
sh.close()
print("k8s images:")
print(sh_out)
return sh_out.split("\n")
def docker_do(img_list):
for img in img_list:
down = url_prefix + img.rsplit("/")[-1]
print(down)
os.system("docker pull %s" % (down))
os.system("docker tag %s %s" % (down, img))
os.system("docker rmi %s" % (down))
print("%s has been downloaded\n\n" % (img))
os.system("docker images")
if __name__ == "__main__":
docker_do(get_k8s_image_name())
chmod +x k8s_images_down.py
./k8s_images_down.py将以上内容拷贝到文件中并执行,假定文件名为 k8s_images_down.py
下面耐心等待镜像下载完成
kubeadm init --pod-network-cidr=10.244.0.0/16
这下应该就没问题了,具体配置信息请参考kubeadm-init
可以看到执行的log提示我们需要安装一个 pod network 到集群,k8s 推荐 flannel(转为k8s设计的,当然其他的也可以),具体可选可以参见k8s-addons。