准备工作
实验平台:Vmware pro 15
操作系统镜像: CentOS-7-x86_64-DVD-1804
1.通过虚拟机创建一个模板主机默认最小化安装,配置如下:
处理器内核总数:2 个
内存:4GB
硬盘大小:40GB ,60GB
网络模式:NAT 模式,仅主机模式
这里有一个配置表可供参考:
| 角色 | 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 终端。
准备部署
在三个节点上分别做以下几个步骤:
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.当你的集群初始化成功后返回如下信息:
先别急着高兴,把最后生成部分内容记录下来,此内容需要在其它节点加入 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
状态:
使用命令 kubectl get pods -n kube-system -o wide
出现 coredns pending 的状态:
如果这些都没有问题的话,那么 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}')
打印出来的应该是这个样子:
7.然后你就可以在 Firefox 浏览器(别用 google)输入 Dashboard 访问地址:https://xxx.xxx.xxx.xxx:30001:
然后我们就可以在 dashboard 里面以图形化的方式监测各个数据的变化。
节点的工作状态:
资源空间的状态:
pod 的状态:
dashboard 里通过 yaml 文件部署
结语:
这就是整个 k8s 的部署过程,当然这只是一个开始,我还在学习的路上,关于 k8s 后面还有好多好多的知识等待被发掘。
部署的参考链接是:kubernetes 中文社区
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于