1、准备两天服务器,一台作为主节点,一台作为从节点

172.28.26.158    k8s-master

172.28.26.15     k8s-node1

 

2、设置主机的名称,方便部署时区别节点。

hostnamectl set-hostname k8s-master

hostnamectl set-hostname k8s-node1

3、master主机和node主机需要关闭的内容

systemctl stop firewalld 关闭防火墙

systemctl disable firewalld

setenforce 0 关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久

swapoff -a 临时关闭swap

sed -ri 's/.*swap.*/#&/' /etc/fstab #永久 

4、在vim /etc/hosts下面配置

master的配置:

172.28.26.158 k8s-master

172.28.26.159 k8s-node1

node配置:

172.28.26.158 k8s-master

172.28.26.159 k8s-node1

5、时间同步

yum install ntpdate -y

ntpdate time.windows.com

6、设置网桥参数

cat > /etc/sysctl.d/k8s.conf << EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

7、安装kubeadm、kubelet、kubectl

vim /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

安装

# 安装kubeadm、kubectl、kubelet

yum install -y kubectl-1.16.0-0 kubeadm-1.16.0-0 kubelet-1.16.0-0

# 启动kubelet服务

systemctl enable kubelet && systemctl start kubelet查看版本

9、部署Kubernetes Master主节点

# 下载管理节点中用到的6个docker镜像,你可以使用docker images查看到

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.16.0 --apiserver-advertise-address 172.28.26.158 --pod-network-cidr=10.244.0.0/16 --token-ttl 0

按照官方的提示进行操作

出现各种报错

我们先查看 kubelet的运行情况

发现有错误,该问题是cgroupsystemd相关的错误,需要修改配置文件

解决方法如下

vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

#在ExecStart后加入

--feature-gates SupportPodPidsLimit=false --feature-gates SupportNodePidsLimit=false

随后再次重启kubelet服务

systemctl daemon-reload && systemctl restart kubelet

systemctl status kubelet

然后我们kubelet get nodes,报错

这时我们还需要解决

If you wish to reset iptables, you must do so manually by using the "iptables" command.这个问题

针对这个,我们用命令 kubeadm reset

然后出现这些问题,解决方法如下

手工清除:

删除net.d

rm -rf /etc/cni/net.d

重置iptables

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

sysctl net.bridge.bridge-nf-call-iptables=1

手动执行以下命令来清除对应的残余网卡信息:

sudo ip link del cni0

sudo ip link del flannel.1

删除 $HOME/.kube/config

rm -rf $HOME/.kube/config

启用 IPVS

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack_ipv4

导出并修改配置文件

kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml

配置文件如下

      dnsDomain: cluster.local

      # 主要修改在这里,替换 Calico 网段为我们虚拟机不重叠的网段(这里用的是 Flannel 默认网段)

      podSubnet: 10.244.0.0/16

      serviceSubnet: 10.96.0.0/12

10、kubeadm 初始化

11、获取将node加入集群的命令

同master节点操作,一直做到

# 启动kubelet服务

systemctl enable kubelet && systemctl start kubelet

到这一步,与上面安装master节点步骤相同,下面开始不一样的操作

首先,我们进入master节点,输入

kubeadm token create --print-join-command

此时,master节点已经加入了集群,然后我们

kubectl get nodes

然后我们进入node节点输入

kubeadm join 172.28.26.158:6443 --token csguyu.alyveqybktpe2z2l     --discovery-token-ca-cert-hash sha256:9c3801d93aee7601c0bb9bf77a6f68fa87f4451e1e9c78459b912b02d7b3f4cb

这个就是刚刚master节点输入kubeadm token create --print-join-command

得到的命令

然后我们继续来到master节点下,输入

kubectl get nodes

说明我们节点已经加入成功,但是我们的节点状态还是NotReady的状态

12、安装flannel(master节点)

下载官方fannel配置文件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

无法下载,/etc/hosts文件添加一条
199.232.68.133 raw.githubusercontent.com

重新执行命令

输入命令查看

kubectl  create -f kube-flannel.yml

kubectl  get pod -n kube-system

启动失败
检查之前命令没有问题后,查看连接的kube-flannel.yml

vim kube-flannel.yml

发现里面有

quay.io/coreos/flannel:v0.11.0-arm64
这种镜像,访问不到quay.io,被墙了。

拷贝kube-flannel.yml内容到本地文件。

然后替换了所有quay.io为quay-mirror.qiniu.com

然后我们

kubectl apply -f kube-flannel.yml

然后我发现quay-mirror.qiniu.com也进不去,只好手动下载

Releases · flannel-io/flannel · GitHub

 

把文件下载到桌面,然后上传到后端根目录下

我们执行

docker load < flanneld-v0.12.0-amd64.docker

然后再一次

kubectl apply -f kube-flannel.yml

kubectl  get pod -n kube-system

然后再一次

kubectl get nodes

启动成功

13、K8s-Dashboard 安装

获取dashboard镜像

下载yaml文件

这里由于在github官网上,无法直接下载,我们到网页上,下载

https://github.com/kubernetes/dashboard/releases

下载2.0.0-rc3版本

然后把文件放进后端

kubectl apply -f recommended.yaml

kubectl get pods --all-namespaces | grep dashboard

我们进入recommended.yaml

Vim recommended.yaml

修改版本号

然后我们重新上面的操作

kubectl apply -f recommended.yaml

kubectl get pods --all-namespaces | grep dashboard

然后我们

kubectl get svc --all-namespaces

删除现有的 dashboard 服务,dashboard 服务的 namespace  kubernetes-dashboard,但是该服务的类型是ClusterIP,不便于我们通过浏览器访问,因此需要改成 NodePort 类型的

kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard

kubectl get svc --all-namespaces

创建配置文件dashboard-svc.yaml

touch dashboard-svc.yaml

vim dashboard-svc.yaml

输入以下内容

kind: Service

apiVersion: v1

metadata:

  labels:

    k8s-app: kubernetes-dashboard

  name: kubernetes-dashboard

  namespace: kubernetes-dashboard

spec:

  type: NodePort

  ports:

    - port: 443

      targetPort: 8443

  selector:

k8s-app: kubernetes-dashboard

保存退出

创建该 Service

kubectl apply -f dashboard-svc.yaml

再次查看服务

kubectl get svc --all-namespaces

创建 kubernetes-dashboard 管理员角色,dashboard-svc-account.yaml内容如下:

touch dashboard-svc-account.yaml

vim dashboard-svc-account.yaml


输入以下内容

apiVersion: v1

kind: ServiceAccount

metadata:

  name: dashboard-admin

  namespace: kube-system

---

kind: ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1beta1

metadata:

  name: dashboard-admin

subjects:

  - kind: ServiceAccount

    name: dashboard-admin

    namespace: kube-system

roleRef:

  kind: ClusterRole

  name: cluster-admin

  apiGroup: rbac.authorization.k8s.io

保存退出

执行创建 kubectl apply -f dashboard-svc-account.yaml

获取 token,就可以在浏览器登录了

kubectl get secret -n kube-system |grep admin|awk '{print $1}'

kubectl describe secret dashboard-admin-token-s645c -n kube-system|grep '^token'|awk '{print $2}'

13、我们再执行一次命令,查看外部访问端口,也就是刚刚我们创建的 Service

kubectl get svc --all-namespaces | grep dashboard

这边我做了一个操作,我去服务器所在的安全组,开放了端口,然后到浏览器上输入

https://x.x.x.x:31176

到这里Kubernetes 就部署完全成功了

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐