下载 Docker 镜像
此镜像在 kubernetes 的仓库中,由于网络原因,无法连接,可以采用替代方案:
IMAGES=(
kube-apiserver:v1.17.4
kube-controller-manager:v1.17.4
kube-scheduler:v1.17.4
kube-proxy:v1.17.4
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
for iname in ${IMAGES[@]};do
docker pull registry.aliyuncs.com/google_containers/$iname
docker tag registry.aliyuncs.com/google_containers/$iname k8s.gcr.io/$iname
docker rmi registry.aliyuncs.com/google_containers/$iname
done
综上,如果不行,以下是完整代码,可直接复制到终端:
#!/bin/bash
IMAGES=(
kube-apiserver:v1.17.4
kube-controller-manager:v1.17.4
kube-scheduler:v1.17.4
kube-proxy:v1.17.4
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
for iname in ${IMAGES[@]};do
docker pull registry.aliyuncs.com/google_containers/$iname
docker tag registry.aliyuncs.com/google_containers/$iname k8s.gcr.io/$iname
docker rmi registry.aliyuncs.com/google_containers/$iname
done
集群初始化
在 master 节点上操作
# 由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址
# apiserver-advertise-address 需要写自己的ip
kubeadm init \
--apiserver-advertise-address=192.168.177.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.17.4 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12
#使用 kubectl 工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
然后我们需要将 node 节点加入集群中,在 node 服务器上执行下述红框的命令加入到 master:
注:重新配置命令 kubeadm reset
集群初始化成功,master 中查看节点:
[root@master /]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 43m v1.17.4
node01 NotReady <none> 10s v1.17.4
node02 NotReady <none> 27m v1.17.4
初始化的一些踩坑
- 节点名称问题:不能有两个 node 节点名称相同;
- 内存问题:主节点 Master 的内存要尽量大,调整到了4G;
- 时间同步问题:一定要事先确认一下三台主机的时间是否同步;
- 如果出现了 kubeadm init 的端口被占用的问题,使用
kubeadm reset
进行重设; - 出现了 kubeadm token list 报错问题,有两种情况:
- 内存不够,用
free -h
进行查看; - kubeadm init 的时候出错,后面要记得加上如下命令对文件的配置进行修改。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装网络插件
Kubernetes 支持多种网络插件,比如 flannel、calico、canal 等等,任选一种使用即可。
本次选择 flannel 下面操作依旧只在 master 节点执行即可,插件使用的是 DaemonSet 的控制器,它会在每个节点上都运行。
Ready ,至此 K8S 网络集群搭建完成。# 获取fannel的配置文件
[root@master ~]# wget
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
[root@master ~]# kubectl apply -f kube-flannel.yml
# 稍等片刻,再次查看集群节点的状态
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 104m v1.17.4
node01 Ready <none> 61m v1.17.4
node02 Ready <none> 88m v1.17.4
[root@master ~]#
环境测试
使用 nginx 来判断是否成功部署,并开启一个pod 。# 部署nginx
[root@master ~]# kubectl create deployment nginx --image=nginx:1.14-alpine
# 暴露端口
[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
# 查看服务状态
[root@master ~]# kubectl get pods,service
NAME READY STATUS RESTARTS AGE
pod/nginx-86c57db685-fdc2k 1/1 Running 0 18m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 82m
service/nginx NodePort 10.104.121.45 <none> 80:30073/TCP 17m
- 内存不够,用