kubernetes安装(国内环境)
起
既然打算学习kubernetes,那么首先要做的就是如何安装k8s。由于k8s的很多核心原理都是基于Linux,所以如果打算学习kubernetes,在Linux上面安装kubernetes是一个很好的建议。所以接下来就介绍如何在Linux上面安装kubernetes。
承
kubernetes的国外安装其实非常简单,国内安装的主要问题在于kubernetes部件所需的官方镜像在 http:// gcr.io (Google Cloud Container Registry)上,很不幸,这个网站被墙了。所以解决了这个问题,国内环境的安装也就简单了。
安装环境
OS : Ubuntu 16.04
网络 : 国内网络,无VPN
目标 : 单节点集群安装
Kubernetes需要安装的部件如下:
最为简单的方式是使用官方的快速安装工具kubeadm,其中Kubeadm, Kubelet和kube-cni可以直接从ubuntu源中下载,剩下的部件有相应的docker镜像,所以可以直接通过kubeadm init来获取。由于需要获取docker镜像,所以在此之前,还要安装docker。
总结下来,安装步骤如下:
- 添加相应的源
- 下载Docker & Kubeadm & Kubelet & Kubernetes-cni
- 关闭swap
- 获取镜像列表,以便从国内获取
- 初始化环境
- 配置授权信息, 以便可以便捷访问kube-apiserver
- 添加网络插件
- 单节点,设置master节点也可以运行Pod(默认策略是master节点不运行)
- 部署其他插件
转
下面将分步说明:
添加相应的源 由于需要下载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
如果上面中科大的源出现了问题,可以使用阿里的源:` https:// mirrors.aliyun.com/kube rnetes/apt/ `
下载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的状态,这是因为缺少相关的网络插件,而网络插件有很多个(以下任选一个),可以选择自己需要的。
安装参考: https:// kubernetes.feisky.xyz/b u-shu-pei-zhi/cluster/kubeadm#pei-zhi-network-plugin
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"}
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-
部署其他插件
由于很多官方的插件所需镜像也在 http:// 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