k8s启示录
首发于k8s启示录
kubernetes安装(国内环境)

kubernetes安装(国内环境)

既然打算学习kubernetes,那么首先要做的就是如何安装k8s。由于k8s的很多核心原理都是基于Linux,所以如果打算学习kubernetes,在Linux上面安装kubernetes是一个很好的建议。所以接下来就介绍如何在Linux上面安装kubernetes。

kubernetes的国外安装其实非常简单,国内安装的主要问题在于kubernetes部件所需的官方镜像在 gcr.io(Google Cloud Container Registry)上,很不幸,这个网站被墙了。所以解决了这个问题,国内环境的安装也就简单了。

安装环境

OS : Ubuntu 16.04
网络 : 国内网络,无VPN
目标 : 单节点集群安装

Kubernetes需要安装的部件如下:

最为简单的方式是使用官方的快速安装工具kubeadm,其中Kubeadm, Kubelet和kube-cni可以直接从ubuntu源中下载,剩下的部件有相应的docker镜像,所以可以直接通过kubeadm init来获取。由于需要获取docker镜像,所以在此之前,还要安装docker。

总结下来,安装步骤如下:

  1. 添加相应的源
  2. 下载Docker & Kubeadm & Kubelet & Kubernetes-cni
  3. 关闭swap
  4. 获取镜像列表,以便从国内获取
  5. 初始化环境
  6. 配置授权信息, 以便可以便捷访问kube-apiserver
  7. 添加网络插件
  8. 单节点,设置master节点也可以运行Pod(默认策略是master节点不运行)
  9. 部署其他插件

下面将分步说明:

添加相应的源 由于需要下载Kubeadm,Kubelet和Kubernetes-cni,多以需要添加源。国外的直接添加google源,具体可以网上搜索。国内的推荐中科大的源,命令如下:

cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
EOF
如果上面中科大的源出现了问题,可以使用阿里的源:`mirrors.aliyun.com/kube`

下载Docker & Kubeadm & Kubelet & Kubernetes-cni

apt-get update && apt-get install -y docker.io kubelet kubernetes-cni=0.6.0-00 kubeadm

添加源之后,使用 apt-get update 命令会出现错误,原因是缺少相应的key,可以通过下面命令添加(E084DAB9 为上面报错的key后8位):

gpg --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
gpg --export --armor E084DAB9 | sudo apt-key add -

关闭swap

如果不关闭kubernetes运行会出现错误, 即使安装成功了,node重启后也会出现kubernetes server运行错误。

sudo swapoff -a #暂时关闭,永久关闭可以上网查询

获取镜像列表

由于官方镜像地址被墙,所以我们需要首先获取所需镜像以及它们的版本。然后从国内镜像站获取。

kubeadm config images list

获取镜像列表后可以通过下面的脚本从阿里云获取:

images=(  # 下面的镜像应该去除"k8s.gcr.io/"的前缀,版本换成上面获取到的版本
    kube-apiserver:v1.12.1
    kube-controller-manager:v1.12.1
    kube-scheduler:v1.12.1
    kube-proxy:v1.12.1
    pause:3.1
    etcd:3.2.24
    coredns:1.2.2
)

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

初始化环境

这个就很简单了,只需要简单的一个命令:

kubeadm init # 这一步注意,如果需要特定的网络插件,需要额外加参数,具体看网络插件的介绍

配置授权信息

所需的命令在init成功后也会有提示,主要是为了保存相关的配置信息在用户目录下,这样不用每次都输入相关的认证信息。

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

添加网络插件

上面安装成功后如果通过查询kube-system下Pod的运行情况,会放下和网络相关的Pod都处于Pending的状态,这是因为缺少相关的网络插件,而网络插件有很多个(以下任选一个),可以选择自己需要的。

安装参考: kubernetes.feisky.xyz/b


CNI bridge


mkdir -p /etc/cni/net.d
cat >/etc/cni/net.d/10-mynet.conf <<-EOF
{
    "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 >/etc/cni/net.d/99-loopback.conf <<-EOF
{
    "cniVersion": "0.3.0",
    "type": "loopback"
}
EOF

flannel

需要在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

weave

sysctl net.bridge.bridge-nf-call-iptables=1
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

calico

需要 kubeadm init 时设置 --pod-network-cidr=192.168.0.0/16

kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml 

单节点,设置master节点也可以运行Pod

kubernetes官方默认策略是worker节点运行Pod,master节点不运行Pod。如果只是为了开发或者其他目的而需要部署单节点集群,可以通过以下的命令设置:

kubectl taint nodes --all node-role.kubernetes.io/master-

部署其他插件

由于很多官方的插件所需镜像也在 gcr.io 上,所以遇到这种情况,可以通过下面的方式获取:

将yaml文件中镜像地址的k8s.gcr.io替换成registry.cn-hangzhou.aliyuncs.com/google_containers

查看是否安装成功

kubectl get pods -n kube-system

如果出现类似下面的情况就说明安装完成了,接下来就可以开始k8s之旅了。

NAME                              READY   STATUS              RESTARTS   AGE
coredns-86c58d9df4-mmjls          1/1     Running             0          6h26m
coredns-86c58d9df4-p7brk          1/1     Running             0          6h26m
etcd-promote                      1/1     Running             1          6h26m
kube-apiserver-promote            1/1     Running             1          6h26m
kube-controller-manager-promote   1/1     Running             1          6h25m
kube-proxy-6ml6w                  1/1     Running             1          6h26m
kube-scheduler-promote            1/1     Running             1          6h25m

这些都是自己学习过程中的总结,所以有任何错误的地方,欢迎指正。附赠一份自己画的步骤图:

国内环境安装k8s

编辑于 2019-02-22

文章被以下专栏收录