云原生--k8s一主多从架构搭建

时间:2022-11-02 14:53:45

目录

一、部署步骤

二、实验环境

1.在所有节点上关闭防护墙与核心防护,并且关闭swap交换

2.修改主机名,并写入每台服务器的host文件中

3.调整内核参数

4.在所有的节点上安装Docker

5.所有节点配置k8s源

6.所有节点安装kubeadm,kubelet和kubectl

7、部署 kubernetes Master 节点(master 节点上执行)

8、token制作

9、k8s-node 节点加入 master 节点(两个 node 执行)

10、master节点安装部署pod网络插件(flannel)

11、给node节点添加标签

12、查询服务是否正常

13、测试 k8s 集群,在集群中创建一个 pod,验证是否能正常运行


云原生--k8s一主多从架构搭建

一、部署步骤

在所有节点上安装Docker和kubeadm

部署Kubernetes Master

部署容器网络插件

部署 Kubernetes Node,将节点加入Kubernetes集群中

部署 Dashboard Web 页面,可视化查看Kubernetes资源

二、实验环境

服务器类型    IP地址

master    192.168.239.128

node01   192.168.239.129

node02   192.168.239.132

1.在所有节点上关闭防护墙与核心防护,并且关闭swap交换

systemctl stop firewalld

setenforce 0

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

swapoff -a         #交换分区必须要关闭

sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭swap分区

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

2.修改主机名,并写入每台服务器的host文件中

cat >> /etc/hosts << EOF

192.168.239.128 master

192.168.239.129 node01

192.168.239.132 node02

EOF

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

这里我后来将node02改成了192.168.239.132

3.调整内核参数

将桥接的ipv4流量传递到iptables

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

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

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

net.ipv6.conf.all.disable_ipv6=1

net.ipv4.ip_forward=1

EOF



#加载参数

sysctl --system 

云原生--k8s一主多从架构搭建

三台都做

云原生--k8s一主多从架构搭建

4.在所有的节点上安装Docker

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce docker-ce-cli containerd.io



mkdir /etc/docker

cat > /etc/docker/daemon.json <<EOF

{

  "exec-opts": ["native.cgroupdriver=systemd"],

  "log-driver": "json-file",

  "log-opts": {

    "max-size": "100m"

  }

}

EOF

#使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。

#日志使用json-file格式类型存储,大小为100M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。



systemctl daemon-reload

systemctl restart docker.service

systemctl enable docker.service



docker info | grep "Cgroup Driver"

Cgroup Driver: system

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

5.所有节点配置k8s源

#定义kubernetes源

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

云原生--k8s一主多从架构搭建

6.所有节点安装kubeadm,kubelet和kubectl

yum install -y kubelet-1.21.3 kubeadm-1.21.3 kubectl-1.21.3

#开机自启kubelet

systemctl enable kubelet.service

systemctl start kubelet

#K8S通过kubeadm安装出来以后都是以Pod方式存在,即底层是以容器方式运行,所以kubelet必须设置开机自启

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

7、部署 kubernetes Master 节点(master 节点上执行)

kubeadm init \

--apiserver-advertise-address=192.168.239.128 \

--image-repository registry.aliyuncs.com/google_containers \

--kubernetes-version v1.21.3 \

--service-cidr=10.96.0.0/12 \

--pod-network-cidr=10.244.0.0/16

各项参数说明

kubeadm init \

--apiserver-advertise-address=10.0.0.116 \  #指定master监听的地址,修改为自己的master地址

--image-repository registry.aliyuncs.com/google_containers \ #指定为aliyun的下载源,最好用国内的

--kubernetes-version v1.18.0 \         #指定k8s版本,1.18.0版本比较稳定

--service-cidr=10.96.0.0/12 \              #设置集群内部的网络

--pod-network-cidr=10.244.0.0/16             #设置pod的网络

# service-cidr 和 pod-network-cidr 最好就用这个,不然需要修改后面的 kube-flannel.yaml 文件

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

执行以下命令可使用kubectl管理工具

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

云原生--k8s一主多从架构搭建

8、token制作

node 节点加入集群需要生成的 token,token 有效期为 24 小时,过期需要重新创建

创建命令为

kubeadm token create --print-join-command

云原生--k8s一主多从架构搭建

kubeadm join 192.168.239.128:6443 --token x9vnku.titck6xbu46bhu0l \

  --discovery-token-ca-cert-hash sha256:662060560b511d9d753d5680b1d898465ac07f451d7e814364de4df223c6f252这里需要复制下来的,将来node节点想要加入k8s集群就需要输入token代码

9、k8s-node 节点加入 master 节点(两个 node 执行)

获取前面创建好的token令牌

kubeadm join 192.168.239.128:6443 --token fav55t.68omf6avhieu04y9 --discovery-token-ca-cert-hash sha256:6adf7f7d26c45c64cbf37eacee55255f34a4ed42443d643191ad6117d8f10287

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

但是此处显示无让罗状态,需要安装网络插件

token 过期重新生成 token命令:

kubeadm token create --print-join-command

10、master节点安装部署pod网络插件(flannel)

​
下载插件yaml插件

wget http://120.78.77.38/file/kube-flannel.yaml(国内)

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml(国外)

​

云原生--k8s一主多从架构搭建

kubectl apply -f kube-flannel.yaml

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

如果这里运行不起来的话解决方法:

#修改 flannel 插件文件,这个版本比较低,高版本 k8s 尽量选择一些高一些的版本 flannel

sed -i -r "s#quay.io/coreos/flannel:.*-amd64#lizhenliang/flannel:v0.12.0-amd64#g" kube-flannel.yaml

kubectl apply -f kube-flannel.yaml

kubectl get pods -n kube-system

kubectl get node  #部署好网络插件,node 准备就绪

云原生--k8s一主多从架构搭建

这里显示我的coredns运行是失败的,这里表示有一个容器运行的容器为0,如果不解决,节点状态将一直是notready状态解决方法:

云原生--k8s一主多从架构搭建

cd /etc/kubernets/

cd manifests/

ls

vim kube-scheduler.yaml

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

vim kube-controller-manager.yaml

云原生--k8s一主多从架构搭建

kubectl get cs

发现全部为健康状态

云原生--k8s一主多从架构搭建

cd ~(注意这里我的yml文件在家目中)

ls

kube apply -f kube-flannel.yml

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

全部running

11、给node节点添加标签

kubectl label node node01 node-role.kubernetes.io/node=node1

kubectl label node node02 node-role.kubernetes.io/node=node2

#获取节点信息

kubectl get nodes

云原生--k8s一主多从架构搭建

12、查询服务是否正常

监测K8s集群是否正常后,再运行服务部署

#查询所有pod是否正常运行

kubectl get pods -A

#查询master是否正常

kubectl get cs

#查询node节点是否ready

kubectl get nodes

云原生--k8s一主多从架构搭建

13、测试 k8s 集群,在集群中创建一个 pod,验证是否能正常运行

#部署服务

kubectl create deployment nginx --image=nginx:1.14

#暴露端口

kubectl expose deployment nginx --port=80 --type=NodePort

kubectl get pods

kubectl get svc(service)

#删除pod与svc

kubectl delete deploy/nginx

kubectl delete svc/nginx

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

云原生--k8s一主多从架构搭建

kubectl delete deploy/nginx

kubectl delete svc/nginx

删除pod与svc