本文完全上接之前我发布的文章从零开始学kubenetes系列(2),此系列是从零开始循序渐进的,如果之前的操作没有完成请参考之前的文章
从零开始学kubenetes系列(2)https://blog.csdn.net/qq_41819823/article/details/116568497?spm=1001.2014.3001.5501
以下(1)-(4)步骤三个节点都要操作
(1)安装wget
$ yum install wget -y
(2) 安装docker
$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
$ yum -y install docker-ce-18.06.1.ce-3.el7
$ systemctl enable docker && systemctl start docker
$ docker --version
(3)添加阿里云yum软件源
首先添加仓库
$ cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
$ systemctl restart docker
添加yum源
$ cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
(4) 指定版本安装k8s
$ yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
$ systemctl enable kubelet
(5)在master节点上进行初始化(仅master节点)
$ kubeadm init \
--apiserver-advertise-address=192.168.31.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
这里要对每一行做一个解释
第一行表示本机IP地址,我之前配过master的IP地址为192.168.31.100
第二行表示使用国内阿里云镜像
第三行表示版本,版本一定要和之前装的相匹配
第四行表示service的IP,就写这个就行
第五行表示集群网络策略IP,如果之后要用flannel网络的话就要写我这个。
这一步初始化其实做了很多的事情,因为在k8s集群的master节点上要装很多的组件比如api server ,controller manager,scheduler,kube-proxy,pause网络栈,coredns,etcd等等,这一步就是从阿里云上拉取组件的镜像然后部署。
安装完毕显示如下
此时输入docker images可以看到已经通过docker拉取的组件
然后直接按照它的指示红框1,输入
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
然后可以使用kubectl get nodes 查看节点信息
还没加入节点时应该只有一个master
(6)node节点的加入(仅在node节点上运行)
把上面标红的框2中的命令!(不是下面的命令)复制下来在节点中执行,这就是节点加入集群的口令token,每24小时会发生变化,如果过期之后想要加入节点,可以在master上执行以下语句产生新的token。
kubeadm token create --print-join-command
在节点执行之后效果如下
然后再在master上运行kubectl get nodes 命令,应该如下截图
但现在仍然是notready 的状态
查看pods状态命令kubectl get pods --all-namespaces也有两个是pending,
这是因为集群内网络还没有通,所以下一步配置网络插件flannel。
(7)安装flannel 网络插件,网络不通的话多试几次。
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
然后等一会通过下面命令再查看pods 和nodes节点状态,应该都是running和ready的状态了
$ kubectl get pods -n kube-system
$ kubectl get nodes
(8)集群测试
然后集群的搭建已经完成了,我们来测试一下
k8s是一个容器化管理系统,因此是从网上下载镜像,然后在本地部署
我们去拉取一个nginx镜像,并开放外界访问IP端口来测试连通性
$ kubectl create deployment nginx --image=nginx
$ kubectl expose deployment nginx --port=80 --type=NodePort
$ kubectl get pod,svc
第一句话的意思是拉取并部署nginx作为一个pod
第二句话,正常来说pod只有集群内部的地址,外界不可访问,我们使其向外暴露一个80端口(Nodeport类型),使外界可以访问
第三句话可以查看nginx 的service的外界暴露端口号和运行情况,依此来测试。
运行结果如下
可见nginx的service向外暴露的端口为30857
所以我们通过浏览器访问 masterIP:30857
即可看到nginx界面(翻墙软件要关掉,否则会连不上)