1. 检查环境
请先确保前面的环境正常, 再进行这一步, 否则出现的各种错误很难定位
检查证书环境
检查kubelet
和kube-proxy
环境
检查kubectl
工具类环境
# 创建kubelet.kubeconfig文件
cp ~/.kube/config /etc/kubernetes/kubelet.kubeconfig
kubelet.kubeconfig
这个文件不要忘记创建
2. k8s运行环境配置
将master
可执行文件目录远程复制过来
mkdir -p /opt/k8s
scp -r root@192.168.1.100:/opt/k8s/bin /opt/k8s
# 设置环境变量, 底部追加
vi /etc/profile
##############################################
export PATH=$PATH:/opt/k8s/bin
##############################################
# 使之生效
source /etc/profile
Node
只需要启动2个服务, 分别为kubelet
,kube-proxy
3. 安装配置Docker
和Flannel
# 安装docker和flannel(注意docker版本是1.12, 不能确保其他版本有用)
yum install docker flannel -y
# 配置flannel
vi /etc/sysconfig/flanneld
#############################################
FLANNEL_ETCD_ENDPOINTS="http://192.168.1.50:2379,http://192.168.1.51:2379"
FLANNEL_ETCD_PREFIX="/kube-centos/network"
#############################################
# 设置出事网络参数
etcdctl --endpoints=http://192.168.1.50:2379,http://192.168.1.51:2379 \
set /kube-centos/network/config \
'{"Network":"172.30.0.0/16","SubnetLen":24,"Backend":{"Type":"vxlan"}}'
# 设置开机启动并启动
systemctl enable flanneld
systemctl start flanneld
systemctl status flanneld -l
注意
ETCD
集群的地址写法, 另外Node
机器上需要安装etcd
才能使用etcdctl
工具
- 当我们安装
flannel
后, 会生成一个docker
的配置文件
- 当服务启动后, 可以在
/run/flannel
文件夹下看到两个文件
此时重启docker
, 会对网桥docker0
的网络进行重新配置, 使其和flannel.1
处于同一网段
# 重启docker
systemctl restart docker
查看网卡信息, 可以看到他们应该在同一网段里面
查看ectd
保存的记录
etcdctl --endpoints=http://192.168.1.50:2379,http://192.168.1.51:2379 ls /kube-centos/network/subnets
4. 安装和配置kubelet
vi /usr/lib/systemd/system/kubelet.service
#############################################
[Unit]
Description=Kubernetes Kubelet Server
After=docker.service
Requires=docker.service
[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/kubelet
ExecStart=/opt/k8s/bin/kubelet \
$KUBE_LOGTOSTDERR \
$KUBE_LOG_LEVEL \
$KUBELET_API_SERVER \
$KUBELET_ADDRESS \
$KUBELET_PORT \
$KUBELET_HOSTNAME \
$KUBE_ALLOW_PRIV \
$KUBELET_POD_INFRA_CONTAINER \
$KUBELET_ARGS
Restart=on-failure
[Install]
WantedBy=multi-user.target
#############################################
!!!重新配置config
!!!
vi /etc/kubernetes/config
##############################################
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=true"
KUBE_MASTER="--master=https://192.168.1.88:6443"
##############################################
--master
一定要指定master
的SLB
地址
vi /etc/kubernetes/kubelet
#############################################
KUBELET_ADDRESS="--address=192.168.1.100"
KUBELET_HOSTNAME="--hostname-override=192.168.1.100"
KUBELET_API_SERVER="--api-servers=https://192.168.1.88:6443"
KUBELET_ARGS="--cgroup-driver=systemd --cluster-dns=10.254.0.2 --experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --require-kubeconfig --cert-dir=/etc/kubernetes/ssl --cluster-domain=cluster.local --hairpin-mode promiscuous-bridge --serialize-image-pulls=false"
#############################################
- --address 不能设置为 127.0.0.1,否则后续 Pods 访问 kubelet 的 API 接口时会失败,因为 Pods 访问的 127.0.0.1 指向自己而不是 kubelet;
- 如果设置了 --hostname-override 选项,则 kube-proxy 也需要设置该选项,否则会出现找不到 Node 的情况;
- --cgroup-driver 配置成 systemd,不要使用cgroup,否则在 CentOS 系统中 kubelet 讲启动失败。
systemctl daemon-reload
systemctl enable kubelet
systemctl start kubelet
systemctl status kubelet -l
5. 安装和配置kube-proxy
vi /usr/lib/systemd/system/kube-proxy.service
#############################################
[Unit]
Description=Kubernetes Kube-Proxy Server
After=network.target
[Service]
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/proxy
ExecStart=/opt/k8s/bin/kube-proxy \
$KUBE_LOGTOSTDERR \
$KUBE_LOG_LEVEL \
$KUBE_MASTER \
$KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
#############################################
vi /etc/kubernetes/proxy
#############################################
KUBE_PROXY_ARGS="--bind-address=192.168.1.100 --hostname-override=192.168.1.100 --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig --cluster-cidr=10.254.0.0/16"
#############################################
--hostname-override
参数值必须与 kubelet 的值一致,否则 kube-proxy 启动后会找不到该 Node
systemctl daemon-reload
systemctl enable kube-proxy
systemctl start kube-proxy
systemctl status kube-proxy -l
6. 验证
查看服务启动情况
查看节点情况
部署一个简单的nginx
kubectl run nginx --replicas=2 --labels run=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
查看Pod
情况
查看对外服务
kubectl get svc nginx
- 当
Node
节点部署好了, 我们可以购买SLB
, 将这些Node节点作为后端服务器, 由SLB
进行端口映射, 或者可以自己搭建负载均衡- 阿里云有相关的
Cloudprovide
服务, 可以将pod
直接发布到SLB
, 但目前还没有开源这块服务