首页

简单高可用 Kubeadm 搭建单节点 Kubernetes 过程记录

简单高可用 Kubeadm 搭建单节点 Kubernetes 过程记录 - 八云酱

这几天稍微踩了踩 Kubernetes 搭建的坑。虽然网络上有很多相关教程,但是实际执行起来却总会因为这样那样的问题卡住。一方面是因为很多命令对于环境的要求不同,另一方面也的确是因为很多作者本身并没有理解原理,胡扯一通反而会误导读者。

这个搭建过程记录是个人踩过无数坑之后的结果。因为自己对于 Kubernetes 理解不够深,所以直接说需要执行的命令。

安装环境

操作系统 => CentOS 7.4 64位

准备工作

# 更新依赖
yum update -y

# 设置主机名
hostnamectl set-hostname master

Docker

关于如何快速安装 Docker 请参考这里

Kubernetes 工具

# 增加 Kubernetes 国内源
cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 禁用 SELinux
setenforce 0

# 安装 Kubernetes 相关工具
yum install -y kubelet kubeadm kubectl
systemctl start kubelet

# 设置 kubelet 为开机启动
systemctl enable kubelet

基础镜像

# 获取初始化所需镜像
kubeadm config images list

# 执行上述命令之后的输出内容
k8s.gcr.io/kube-apiserver:v1.13.3
k8s.gcr.io/kube-controller-manager:v1.13.3
k8s.gcr.io/kube-scheduler:v1.13.3
k8s.gcr.io/kube-proxy:v1.13.3
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.2.24
k8s.gcr.io/coredns:1.2.6

将输出内容编辑成如下形式并直接执行。

# 这里的数组内容是前一步输出内容去掉 "k8s.gcr.io/" 前缀之后得到的
images=(
    kube-apiserver:v1.13.3
    kube-controller-manager:v1.13.3
    kube-scheduler:v1.13.3
    kube-proxy:v1.13.3
    pause:3.1
    etcd:3.2.24
    coredns:1.2.6
)

for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done

初始化

# 添加 CNI 网桥
mkdir -p /etc/cni/net.d
cat << EOF > /etc/cni/net.d/10-mynet.conf
{
    "cniVersion": "0.3.0",
    "name": "mynet",
    "type": "bridge",
    "bridge": "cni0",
    "isGateway": true,
    "ipMasq": true,
    "ipam": {
        "type": "host-local",
        "subnet": "10.244.0.0/16",
        "routes": [
            {"dst": "0.0.0.0/0"}
        ]
    }
}
EOF

cat << EOF > /etc/cni/net.d/99-loopback.conf
{
    "cniVersion": "0.3.0",
    "type": "loopback"
}
EOF

# 初始化 Kubeadm
kubeadm init --pod-network-cidr=10.244.0.0/16
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

# 测试是否成功
export KUBECONFIG=/etc/kubernetes/kubelet.conf
kubectl get nodes