kubeadmin 部署完整 K8s-1.15.3 版本的集群的过程

本贴最后更新于 1772 天前,其中的信息可能已经水流花落

准备工作

实验平台:Vmware pro 15
操作系统镜像: CentOS-7-x86_64-DVD-1804

1.通过虚拟机创建一个模板主机默认最小化安装,配置如下:

处理器内核总数:2 个
内存:4GB
硬盘大小:40GB ,60GB
网络模式:NAT 模式,仅主机模式

t2.png

这里有一个配置表可供参考:
| 角色 | CPU 数量 | 内存大小 | 主机名 | 磁盘 |
| master | >=2c | >=2G | master | sda、sdb |
| worker | >=2c | >=2G | node1 | sda、sdb |
| worker | >=2c | >=2G | node2 | sda、sdb |

2.完成安装后,安装基础软件包

yum -y install net-tools wget vim

3.从模板主机克隆三个操作系统,并分别命名为 Master,node-1,node-2,连接上 ssh 终端。

t3.png

准备部署

在三个节点上分别做以下几个步骤:

1.先分别更改节点的 hostname 为 Master,node-1,node-2

 hostnamectl set-hostname master
 hostnamectl set-hostname node-1
 hostnamectl set-hostname node-2

2.编辑节点机的 /etc/hosts 文件,添加域名解析

cat <<EOF >>/etc/hosts
172.22.8.141 master
172.22.8.142 node1
172.22.8.143 node2
EOF

3.关闭节点防火墙

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

4.关闭节点交换分区

swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab

5.开启节点 ipv4 转发

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system

6.配置节点国内 yum 源

yum install -y wget

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo

yum clean all && yum makecache

7.配置节点国内 Kubernetes 源

请注意这一步很重要,很多时候 kubeadmin 无法 init 就是因为 GFW 的原因,所以当我们配置完下面 Kubernetes 源之后,kubeadmin 就可以从国内 pull 镜像了。

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

8.配置节点 docker 源

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

开始部署

在三个节点上进行以下几个步骤:

1.安装并启动节点的 docker

yum install -y docker-ce-18.06.1.ce-3.el7

systemctl enable docker && systemctl start docker
检测docker是否成功安装,出现下面显示就说明成功安装了

docker --version

Docker version 18.06.1-ce, build e68fc7a

2.安装并启动节点的 kubeadm、kubelet、kubectl 工具

yum install -y kubelet kubeadm kubectl

systemctl enable kubelet

Kubelet 负责与其他节点集群通信,并进行本节点 Pod 和容器生命周期的管理。
Kubeadm 是 Kubernetes 的自动化部署工具,降低了部署难度,提高效率。
Kubectl 是 Kubernetes 集群管理工具。

Kubeadmin 在 master 节点进行 Kubernetes 集群初始化

❤️ 只在 master 节点上进行!

请注意将 api-server 的地址改成你的 master 节点的地址

kubeadm init --kubernetes-version=1.15.3 \
--apiserver-advertise-address=172.22.8.141 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

3.当你的集群初始化成功后返回如下信息:
t4.png

先别急着高兴,把最后生成部分内容记录下来,此内容需要在其它节点加入 Kubernetes 集群时执行,如下:

4.配置 kubectl 工具

mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config

查看主节点状态是否OK:
kubectl get nodes
kubectl get cs

5.将其他两个节点加入集群,分别在另外两个节点上使用刚刚在最后部分记录下的命令:

kubeadm join 172.22.8.141:6443 --token o5weqe.nwmt7dbn8jghuvkx \
    --discovery-token-ca-cert-hash sha256:c872d1c4b4919f0dcd00fbd2efcfdd6564593342be9716eea12e31e14c9c3e6b 

6.部署节点的 flannel 网络(其实还可以使用 calico 网络进行安装,这里就不做演示了)

当我们成功将两个节点加入后,还应该选择一种网络插件对集群进行安装:
使用 kubectl 工具可以让我们快速部署 flannel 网络

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

验证 flannel 是否安装成功,在 master 上使用 kubectl get pods -n kube-system -o wide 命令

只要出现三个 flannelpod 分别在三个节点上处于 running 状态,像这样:

kube-flannel-ds-amd64-6jmcm      1/1     Running   0          88s     172.22.8.143   node-2        
kube-flannel-ds-amd64-89rrf      1/1     Running   0          88s     172.22.8.141   master              
kube-flannel-ds-amd64-fqqqt      1/1     Running   0          88s     172.22.8.142   node-1            

以及 coredns 也处于 running 状态:

coredns-bccdc95cf-ghwp6          1/1     Running   0          12m     10.244.0.2     master           
coredns-bccdc95cf-glhn2          1/1     Running   0          12m     10.244.0.3     master 

否则就会出现诸如此类的错误:
使用 kubectl get nodes 出现节点 NotReady 状态:
t7.png

使用命令 kubectl get pods -n kube-system -o wide 出现 coredns pending 的状态:
t8.png

如果这些都没有问题的话,那么 k8s 的基础部署就已经成功部署了。

【可选做】部署 Dashboard(图形化界面)

还是要在 master 节点上做以下几个步骤:
1.创建下载 Dashboard 的 yaml 文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

2.使用如下命令直接编辑 kubernetes-dashboard.yaml 文件

sed -i 's/k8s.gcr.io/loveone/g' kubernetes-dashboard.yaml
sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' kubernetes-dashboard.yaml

3.部署 Dashboard

kubectl create -f kubernetes-dashboard.yaml

4.创建完成后,检查相关服务运行状态

kubectl get deployment kubernetes-dashboard -n kube-system
kubectl get pods -n kube-system -o wide
kubectl get services -n kube-system
netstat -ntlp|grep 30001

5.创建 Dashboard 的认证令牌

kubectl create serviceaccount  dashboard-admin -n kube-system
kubectl create clusterrolebinding  dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

6.查看 Dashboard 的认证令牌:

kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

打印出来的应该是这个样子:
t9.png

7.然后你就可以在 Firefox 浏览器(别用 google)输入 Dashboard 访问地址:https://xxx.xxx.xxx.xxx:30001
t10.png

然后我们就可以在 dashboard 里面以图形化的方式监测各个数据的变化。

节点的工作状态:
t11.png

资源空间的状态:
t12.png

pod 的状态:
t13.png

dashboard 里通过 yaml 文件部署
t14.png

结语:

这就是整个 k8s 的部署过程,当然这只是一个开始,我还在学习的路上,关于 k8s 后面还有好多好多的知识等待被发掘。

部署的参考链接是:kubernetes 中文社区

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    491 引用 • 917 回帖
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    110 引用 • 54 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...