centOS7.9部署k8s

centOS7.9部署k8s

k8s安装环境

至少准备三台centos服务器,其中一台为master节点,两台work节点;centos系统版本为7.5或以上版本;我这里使用的是7.9,除此之外,还需要一些额外的条件

*.每台主机至少具备2G内存;2核CPU

*.一定关闭防火墙

1、时间同步

k8s要求集群中的节点必须精确一致,所以直接使用chronyd从网络同步时间

# 启动chronyd服务

systemctl start chronyd

# 设为开机自启

systemctl enable chronyd

# 查看当前时间

date

2、重新设置主机名

*这里有重要的一步,请记住自己master和node之间通信的ip,如我的master的ip为172.26.39.191,node的ip为:172.26.39.192. 请确保使用这两个ip在master和node上能互相ping通,这个master的ip 172.26.39.191接下来配置k8s的时候需要用到。

# 主节点

hostnamectl set-hostname master

# 工作节点1

hostnamectl set-hostname node1

# 工作节点2

hostnamectl set-hostname node2

$ vi /etc/hosts

添加如下内容:

192.26.39.191 master

192.26.39.192 node1

192.26.39.192 node2

3、关闭防火墙

 systemctl stop firewalld

 systemctl disable firewalld

4、禁用SELINUX

# 临时禁用,重启后复原,也可以用 setenforce Permissive 命令,效果是一样的

setenforce 0

# 永久禁用,

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

5、关闭swap分区

#临时关闭swap分区, 重启失效;

swapoff -a

#永久关闭swap分区

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

6、将桥接的IPV4流量传递到iptables 的链

cat <

br_netfilter

EOF

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

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

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

EOF

[root@master ~]# sysctl --system

7、配置ipvs功能

在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块

  1. 安装ipset和ipvsadm

sudo yum install -y yum-utils

[root@master ~]# yum install ipset ipvsadmin -y

2.添加需要加载的模块写入脚本文件

[root@master ~]# cat < /etc/sysconfig/modules/ipvs.modules

#!/bin/bash

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack_ipv4

EOF

3.为脚本添加执行权限

[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules

4.执行脚本文件

[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules

5.查看对应的模块是否加载成功

[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4

centOS7.9部署k8s_第1张图片

二、安装docker

1、卸载原docker

# 查看已安装的docker

yum list installed | grep docker

# 卸载docker相关组件

yum -y remove docker*

# 除了docker之外,也需要将containerd.io 卸载,这是容器相关的组件

docker -y remove containerd.io.x86_64

# 删除docker目录

rm -rf /var/lib/docker

2、使用国内的阿里云镜像仓

# 使用国内的阿里云镜像仓库-- 比较快 ,建议使用这个

[root@master ~]# yum-config-manager --add-repo \

http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

出现

问题解决:这个是因为系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令yum -y install yum-utils 安装就可以了

3、安装指定版本的docker

安装19.03.13以下的,版本太高,后期会出现kubeadm不兼容的的问题

[root@master ~]# yum install \

docker-ce-19.03.2 docker-ce-cli-19.03.2 containerd.io-1.4.4 -y

4、使用systemd代替cgroupfs、以及配置仓库镜像地址

docker在默认情况下使用Cgroup Driver 为cgroupfs,

而k8s推荐使用systemd来代替cgroupfs,

所以在/etc/docker/daemon.json内加入以下内容,如果没有这个文件,手动创建一个

vi /etc/docker/daemon.json

{

"registry-mirrors": ["https://q2hy3fzi.mirror.aliyuncs.com"],

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

}

报错:

“/etc/docker/daemon.json” E212: Can’t open file for writing

解决方案:

cd /etc

mkdir docker

cd docker

vi daemon.json

5、启动docker

# 第一种:启动docker

systemctl start docker

# 第二种:启动docker并设为开机启动

systemctl enable docker --now

#查看docker版本

docker -v

docker version

docker --version

安装k8s

1、添加阿里云YUM软件源

cat <

[kubernetes]

name=Kubernetes

baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

exclude=kubelet kubeadm kubectl

EOF

2、EOF安装kubeadm,kubelet和kubectl

  1. 指定版本

yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1 --disableexcludes=kubernetes

  1. 最新版本

yum install -y kubelet kubeadm kubectl

3、添加配置

在 /etc/sysconfig/kubelet 文件中加入以下内容、

vi /etc/sysconfig/kubelet

KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"

KUBE_PROXY_MODE="ipvs"

4、启动kubelet

# 开机自动启动

systemctl enable --now kubelet

5、使用kubeadm引导集群

初始化主节点之前,需要先下载一些组件,但是这些组件都在官网上,所以我们国内是无法下载的,所以一我们将官网的镜像改成阿里云的镜像,以下命令执行后会在当前目录得到一个 images.sh 的脚本文件,执行后会在docker中下载一些需要的组件,理论上这些只需要在主节点上执行,但是为了保险起见,我们在所有节点都安装一下

sudo tee ./images.sh <<-'EOF'

#!/bin/bash

images=(

kube-apiserver:v1.23.1

kube-proxy:v1.23.1

kube-controller-manager:v1.23.1

kube-scheduler:v1.23.1

coredns:1.7.5

etcd:3.4.13-0

pause:3.2

kubernetes-dashboard-amd64:v1.10.0

heapster-amd64:v1.5.4

heapster-grafana-amd64:v5.0.4

heapster-influxdb-amd64:v1.5.2

pause-amd64:3.1

)

for imageName in ${images[@]} ; do

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName

done

EOF

设置可执行权限并执行脚本

chmod +x ./images.sh && ./images.sh

四.部署Kubernetes Master

1、初始化主节点

kubeadm init \

--apiserver-advertise-address=172.26.38.191 \

--control-plane-endpoint=master \

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

--kubernetes-version v1.23.1 \

--service-cidr=10.1.0.0/16 \

--pod-network-cidr=10.244.0.0/16

安装过程需等待几分钟

centOS7.9部署k8s_第2张图片

这样就算成功了

查看镜像

centOS7.9部署k8s_第3张图片

2、初始化后续

根据上面的提示继续进行配置,如果需要使用集群,还需要执行以下命令,

记住,这里的命令是从第一步初始化成功后拷贝过来的命令,应该拷贝你的命令来执行

mkdir -p $HOME/.kube

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

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

下面就可以直接使用kubectl命令了

kubectl get node

3、安装插件

1、下载

curl https://docs.projectcalico.org/manifests/calico.yaml -O

kubectl apply -f calico.yaml

2、查看是否部署成功

 kubectl get pods -n kube-system

centOS7.9部署k8s_第4张图片

  再次查看node,可以看到状态为ready

如果安装失败,执行下面的命令

 kubeadm reset

 rm -rf $HOME/.kube

五、work节点加入集群

向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:

复制上面命令,在node节点上执行

[root@master ~]# kubeadm join 172.26.38.191:6443 --token xrkax8.7izalcr2y9ggf5ph \

--discovery-token-ca-cert-hash sha256:d8167c9353369f476016f75ba176b3ff6b5e7ef57e614bcf581caa368082122d

centOS7.9部署k8s_第5张图片

出现了这个问题,若无,请忽略,进行下一步

解决:删除残留文件

rm -f /etc/kubernetes/kubelet.conf #删除k8s配置文件

rm -f /etc/kubernetes/pki/ca.crt #删除K8S证书

端口占用提示:[ERROR Port-10250]: Port 10250 is in use

解决:查看占用进程,然后杀掉,然后再加入

sudo yum install -y net-tools -q #安装相关工具(-q:静默安装)

然后在查看端口

netstat -ntpl | grep 10250

 可以看出,是K8S占用了,那就尝试重启服务看看能不能解决

systemctl restart kubelet

再次查看端口就没有了

最后再次执行 kubeadm join.................

执行成功

centOS7.9部署k8s_第6张图片

如果token忘记了,则可以通过如下操作:

1)查看token,如果token失效,则重新生成一个

$ kubeadm token list

$ kubeadm token create

2)获取ca证书sha256编码hash值

$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

六、部署dashboard

1、部署

kubernetes官方提供的可视化界面

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

centOS7.9部署k8s_第7张图片

2、设置访问端口

kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

centOS7.9部署k8s_第8张图片

type: ClusterIP 改为 type: NodePort

kubectl get svc -A |grep kubernetes-dashboard

找到端口,在安全组放行

访问: https://集群任意IP:端口 https://120.27.139.90:30051

centOS7.9部署k8s_第9张图片

3、创建访问账号

#创建访问账号,准备一个yaml文件; vi dash.yaml

apiVersion: v1

kind: ServiceAccount

metadata:

name: admin-user

namespace: kubernetes-dashboard

---

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

name: admin-user

roleRef:

apiGroup: rbac.authorization.k8s.io

kind: ClusterRole

name: cluster-admin

subjects:

- kind: ServiceAccount

name: admin-user

namespace: kubernetes-dashboard

然后执行

kubectl apply -f dash.yaml

b62ead44b294b8c08d4d6fc1d6ce73fe.png

4、令牌访问

#获取访问令牌

kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"

centOS7.9部署k8s_第10张图片

然后写入到token里面

centOS7.9部署k8s_第11张图片

5、界面

centOS7.9部署k8s_第12张图片

后面会继续发布k8s自动化部署项目的文章

你可能感兴趣的:(linux,服务器,k8s,kuberctl)