kubernetes高可用集群部署 - 5. node集群

1. 检查环境

请先确保前面的环境正常, 再进行这一步, 否则出现的各种错误很难定位

检查证书环境

kubernetes高可用集群部署 - 5. node集群_第1张图片

检查kubeletkube-proxy环境

kubernetes高可用集群部署 - 5. node集群_第2张图片

检查kubectl工具类环境

kubernetes高可用集群部署 - 5. node集群_第3张图片
# 创建kubelet.kubeconfig文件
cp ~/.kube/config /etc/kubernetes/kubelet.kubeconfig

kubelet.kubeconfig 这个文件不要忘记创建

2. k8s运行环境配置

master可执行文件目录远程复制过来

mkdir -p /opt/k8s
scp -r [email protected]:/opt/k8s/bin /opt/k8s

# 设置环境变量, 底部追加
vi /etc/profile
##############################################
export PATH=$PATH:/opt/k8s/bin
##############################################

# 使之生效
source /etc/profile

Node只需要启动2个服务, 分别为kubelet, kube-proxy

3. 安装配置DockerFlannel

# 安装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
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
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 一定要指定masterSLB地址

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_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/architect/pod-infrastructure"
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
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
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. 验证

查看服务启动情况

kubernetes高可用集群部署 - 5. node集群_第4张图片

查看节点情况

kubernetes高可用集群部署 - 5. node集群_第5张图片

部署一个简单的nginx

kubectl run nginx --image=registry.cn-hangzhou.aliyuncs.com/spacexnice/nginx:latest --replicas=2 --labels run=nginx
kubectl expose deployment nginx --port=80 --type=NodePort

查看Pod情况

查看对外服务

kubectl get svc nginx

此时可以通过外部浏览器访问 http://任意Node的IP:32452

  • Node节点部署好了, 我们可以购买SLB, 将这些Node节点作为后端服务器, 由SLB进行端口映射, 或者可以自己搭建负载均衡
  • 阿里云有相关的Cloudprovide服务, 可以将pod直接发布到SLB, 但目前还没有开源这块服务

高可用部署系列

Kubernetes高可用集群部署 - 1. 生成证书
Kubernetes高可用集群部署 - 2. ETCD集群
Kubernetes高可用集群部署 - 3. kubectl工具配置
Kubernetes高可用集群部署 - 4. master集群
-> Kubernetes高可用集群部署 - 5. node集群
Kubernetes高可用集群部署 - 6. DNS配置

相关服务

Kubernetes配置secret拉取私仓镜像
Kubernetes目录挂载
Kubernetes Ingress使用
Kubernetes限制pod的cpu和内存
Helm部署Kubernetes应用
Kubernetes监控(Heapster)
Kubernetes监控(coreos/prometheus-operator)

你可能感兴趣的:(kubernetes高可用集群部署 - 5. node集群)