Environment="NO_PROXY=localhost,127.0.0.1,localaddress,.localdomain.com"
EOF
systemctl daemon-reload
systemctl restart docker
docker info | grep Proxy # 有输出说明配置成功
docker pull gcr.io/google-containers/busybox:1.27 # pull 成功代表工作正常。
安装 kube* 组件
apt-get update && apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
systemctl enable kubelet
systemctl start kubelet
- Master 节点配置 cgroup driver
docker info | grep -i cgroup # 一般是 cgroupfs
cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf # --cgroup-driver 对应值默认是 systemd
#两个值不一致的话使用以下命令修改
sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
#重启 kubelet
systemctl daemon-reload
systemctl restart kubelet
- curl 访问的是墙外的网站,无法访问的话可以配置系统代理。
http://192.168.99.1:8118/
是我本地使用的 HTTP 代理,Privoxy 监听 8118 端口,按照实际情况修改该地址。
# 全局代理,不推荐
cat <<EOF >>/etc/environment
http_proxy="http://192.168.99.1:8118/"
https_proxy="http://192.168.99.1:8118/"
no_proxy="master, node1, node2, 192.168.99.1"
EOF
source /etc/environment
#当前 shell,推荐
export http_proxy="http://192.168.99.1:8118/"
export https_proxy="http://192.168.99.1:8118/"
export no_proxy="master, node1, node2, 192.168.99.1"
cat <<EOF >>/etc/apt/apt.conf
Acquire::http::Proxy "http://192.168.99.1:8118/";
Acquire::https::Proxy "https://192.168.99.1:8118/";
EOF
搭建集群
禁用交换区
k8s 文档明确要求的。
初始化 master 节点
- 初始化过程会访问墙外网站,如果 init 不能顺利执行,请配置全局代理
kubeadm init --apiserver-advertise-address=192.168.99.200 --pod-network-cidr=10.244.0.0/16
--apiserver-advertise-address=192.168.99.200
绑定 apiserver 到 master 节点的 Host-Only 适配器的地址,默认是绑到 NAT 的地址上,这样其他机器是永远也访问不到的。
--pod-network-cidr=10.244.0.0/16
指定 pod 网络地址空间,我们使用 flannel 组件必须使用这个空间。
- kubeadm 的完整参考手册 kubeadm reference guide
- 推荐保存最后输出的 join 命令到文件(以免忘记或找不到了),方便添加节点到集群。如果忘了也找不到输出了,网上有方法生成哈希值,请自行查找。
# root user
export KUBECONFIG=/etc/kubernetes/admin.conf
# non-root user
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 从本地主机操作,需要在本地安装 kubectl 客户端
mkdir -p ~/.kube
scp <username>@192.168.99.200:/home/<username>/.kube/config ~/.kube/config # 从 master 复制配置文件到本地
kubectl cluster-info #有正常输出即可
安装 flannel 网络
- flannel 默认的监听接口是 NAT 适配器的接口,我们需要的是 Host-Only 适配器的接口,所以需要修改 kube-flannel.yml 文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
给 /opt/bin/flanneld 命令添加 --iface="enp0s8" 参数 # enp0s8 是 Host-Only 适配器对应的接口
kubectl apply -f kube-flannel.yml
kubectl get pods --all-namespaces -o wide # 稍等一会,下载镜像需要一定时间,最后应该显示 flannel pods 是 Running 状态, kube-dns 也是 Running 状态
- 消除 master 隔离。默认 master 上不调度 p