K8s 详细安装部署流程

发布时间:2023年12月17日

1.?环境准备

1.1 服务器配置要求

  • 3台机器,操作系统 CentOS7.9-64位系统
  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘20GB或更多
  • 集群中所有机器之间网络互通
  • 可以访问外网,需要拉取镜像 禁止swap分区

1.2 服务器配置要求

软件

版本

操作系统

CentOS7.9_x64

Docker

20-ce

Kubernetes

1.23

1.3 服务器配置要求

服务器名称

服务器IP

master

192.168.134.133

node1

192.168.134.132

node2

192.168.134.131

2.?环境准备

?2.1 执行以下命令(3台机器):

? cat >> /etc/hosts << EOF

? 192.168.134.133 master

? 192.168.134.132 node1

? 192.168.134.131 node2

? EOF

??2.2 设置主机别名

?#命令:hostnamectl set-hostname <hostname>

?#示例:

?# 192.168.134.133(在master节点执行)

?hostnamectl set-hostname ?master

?# 192.168.134.132(在node1节点执行)

?hostnamectl set-hostname ?node1

?# 192.168.134.131(在node2节点执行)

?hostnamectl set-hostname ?node-2

??2.3 关闭防火墙(3台机器)

??systemctl stop firewalld ???#关闭防火墙

? systemctl disable firewalld ?#设置开机禁用

??2.4 关闭selinux服务(3台机器)

? sed -i 's/enforcing/disabled/' /etc/selinux/config ??#重启后生效

? 2.5 关闭swap分区(3台机器)

? ? ? 当内存不足时,linux会自动使用swap,将部分内存数据存放到磁盘中。swap会导致docker的运行不正常,性能下降,还可能产生其他问题,因此部署k8s集群时一定要关闭swap分区。在每个节点(三台机器)上都进行以下操作:

? vi /etc/fstab

? #注释掉下面的设置

? /dev/mapper/centos-swap swap

2.5 添加网桥过滤和地址转发功能(3台机器)

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

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

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

? net.ipv4.ip_forward = 1

? EOF

? #然后执行

? sysctl --system ??//生效命令

3.?容器组件安装

? 3.1?安装docker(3台机器)

? ?#查看系统是否已安装docker

? rpm -qa|grep docker

? #卸载旧版本docker

? sudo yum remove docker* ?

? #安装yum工具包

? yum -y install yum-utils

? #设置阿里云的stable 镜像仓库

? yum-config-manager?

? ?--add-repo??https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

?#安装docker的指定版本

sudo yum install -y docker-ce-20.10.9-3.el7 docker-ce-cli-20.10.9-3.el7 containerd.io

#启动docker并设置开机自启,若启动或设置失败(把docker目录全部删除,手动创建)

systemctl start docker

systemctl enable docker

# 验证 Docker 是否安装成功,查看docker状态

systemctl status docker

docker version

#创建docker配置

mkdir -p /etc/docker

#配置阿里云镜像加速:

tee /etc/docker/daemon.json <<-'EOF'

{

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

??"registry-mirrors": [

????"https://du3ia00u.mirror.aliyuncs.com",

????"https://hub-mirror.c.163.com",

????"https://mirror.baidubce.com",

????"https://registry.docker-cn.com"

??],

??"live-restore": true,

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

??"log-opts": {"max-size":"500m", "max-file":"3"},

??"max-concurrent-downloads": 10,

??"max-concurrent-uploads": 5,

??"storage-driver": "overlay2"

}

EOF

#使之生效

systemctl daemon-reload

#重启docker

systemctl restart docker

3.2?安装k8s

? 3.2.1 k8s镜像切换成国内源(3台机器)

?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

3.2.2 安装kubeadm、kubelet和kubectl(3台机器)

????yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0

????# 验证并查看安装版本

? ?kubelet --version

? #设置kubelet开机启动

? systemctl enable kubelet

3.2.3 部署k8s(只在master节点执行)

kubeadm init \

??--apiserver-advertise-address=192.168.134.133 \

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

??--kubernetes-version v1.23.0 \

??--service-cidr=10.96.0.0/12 \

??--pod-network-cidr=10.244.0.0/16 \

??--ignore-preflight-errors=all

说明:

apiserver-advertise-address =Master节点的 IP 地址。

image-repository=docker镜像仓库地址。

kubernetes-version= 安装的kubernetes版本

service-cidr 和 apiserver-advertise-address 、pod-network-cidr 不能在同一个网络范围内。

不要使用 172.17.0.1/16 网段范围,因为这是 Docker 默认使用的。初始化可能比较慢。

#创建必要文件

mkdir -p $HOME/.kube

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

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

# 生成一个永不过期的token,系统会生成一个kubeadm join命令:

kubeadm token create --ttl 0 --print-join-command

#?部署 Kubernetes 的 Node节点(master节点)

kubeadm join 192.168.134.133:6443 \

????--token znzat2.pcyncojhuc36yxol \

????--discovery-token-ca-cert-hash \

?sha256:97e5e7d9b1a5dda39e9e95559896b8bb5695325e2f093bccc115da81d9cfd9d2 ?

3.2.4部署网络插件(master节点)

????Kubernetes本身并没有自己实现容器网络,而是借助CNI标准,通过插件化的方式来集成各种网络插件,实现集群内部网络相互通信。

Kubernetes集群设计了Cluster IP、Node IP、Pod IP三种类型的通信IP:

(1)Cluster IP是Service对象的IP地址,实现Pod服务的负载均衡,外部网络无法ping通,只在集群内部可以访问使用,是一个虚拟的IP。

(2)Node IP是集群节点Node的IP地址,可以是物理机的IP(也可能是虚拟机IP)。

(3)Pod IP是容器组Pod的IP地址,是在容器组初始化过程由Pause容器申请的IP地址。其中Pod IP是容器网络接口CNI与具体的网络插件来实现IP的申请及数据包的转发。

????# 下载CNI网络插件

wget https://docs.projectcalico.org/manifests/calico.yaml

# 下载完之后还需要修改里面定义的pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm?init初始化的–pod-network-cdir(pod所使用的网络)指定的一样;

vim calico.yaml

# 部署 calico

kubectl apply -f calico.yaml

# 查看pods,pod都Running之后,node节点也会准备就绪

kubectl get pods -n kube-system

kubectl get nodes

所有节点都变成ready,k8s则已经部署完成

3.3??安装Nginx

部署nginx测试

#先创建一个yaml文件

vim nginx.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

??name: nginx-deployment

??labels:

????app: nginx

spec:

??replicas: 3

??selector:

????matchLabels:

??????app: nginx

??template:

????metadata:

??????labels:

????????app: nginx

????spec:

??????containers:

??????- name: nginx

????????image: nginx

# 文件保存,执行以下命令

???kubectl apply -f nginx.yaml

#再创建一个yaml文件

vim nginx-service.yaml

apiVersion: v1

kind: Service

metadata:

??name: nginx-service

spec:

??selector:

????app: nginx

??type: NodePort

??ports:

????- protocol: TCP

??????port: 80

??????targetPort: 80

# 保存文件,执行以下命令

kubectl apply -f nginx-service.yaml

#查看服务 (Running说明启动成功)

kubectl get pod,svc

在浏览器输入对应的ip和端口,访问nginx

http://192.168.134.133:32252/

文章来源:https://blog.csdn.net/weixin_37934748/article/details/134927870
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。