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
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
一定要指定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_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. 验证
查看服务启动情况

查看节点情况

部署一个简单的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)
网友评论