kubeadm搭建测试环境k8s集群

目录

  • 实验环境规划
  • 1、实验环境准备
    • 1.1、配置机器主机名
    • 1.2、配置主机 hosts 文件,相互之间通过主机名互相访问
    • 1.3、配置主机之间无密码登录
    • 1.4、关闭交换分区 swap,提升性能
    • 1.5、修改机器内核参数
    • 1.6、关闭 firewalld 防火墙和selinux
    • 1.7、 配置阿里云的 repo 源
    • 1.8、配置时间同步
    • 1.9、开启ipvs
    • 1.10、安装基础软件包
  • 2、安装 docker 服务
    • 2.1、安装 docker-ce
    • 2.2 、配置 docker 镜像加速器和驱动
  • 3、安装初始化 k8s 需要的软件包
  • 4、kubeadm 初始化 k8s 集群
  • 5、扩容 k8s 集群-添加两个工作节点
  • 6、安装 kubernetes 网络组件-Calico
  • 7、测试 k8s 集群中部署 tomcat 服务
  • 到此完结☺

实验环境规划

podSubnet(pod 网段) 10.244.0.0/16
serviceSubnet(service 网段): 10.10.0.0/16
服务器ip(主机网段):10.30.0.0/16
注意:pod、service、主机ip不能在同一网段
实验环境规划:
操作系统:centos7.8
配置: 4Gib 内存/2vCPU/100G 硬盘

1、实验环境准备

1.1、配置机器主机名

#在主节点上执行 
[root@test-0020 ~]# hostnamectl  set-hostname  k8s-master && bash
#在工作节点node1上执行 
[root@test-0021 ~]# hostnamectl  set-hostname  k8s-node1 && bash
#在工作节点node2上执行 
[root@test-0022 ~]# hostnamectl  set-hostname  k8s-node2 && bash

1.2、配置主机 hosts 文件,相互之间通过主机名互相访问

三台节点都需要添加
[root@k8s-master ~]# vim /etc/hosts
10.30.11.180 k8s-master 
10.30.11.181 k8s-node1
10.30.11.182 k8s-node2

1.3、配置主机之间无密码登录

#三台节点都需要做
[root@k8s-master ~]# ssh-keygen   #一路回车,不输入密码
#把本地生成的密钥文件和私钥文件拷贝到远程主机
[root@k8s-master ~]# ssh-copy-id -i k8s-master
[root@k8s-master ~]# ssh-copy-id -i k8s-node1
[root@k8s-master ~]# ssh-copy-id -i k8s-node2

1.4、关闭交换分区 swap,提升性能

#临时关闭,三台节点都需要做
[root@k8s-master ~]# swapoff  -a

#永久关闭:注释 swap 挂载,给 swap 这行开头加一下注释
[root@k8s-master ~]# vim /etc/fstab
#/dev/mapper/centos-swap swap swap defaults 0 0

1.5、修改机器内核参数

三台节点都需要做
[root@k8s-master ~]# modprobe br_netfilter
[root@k8s-master ~]# echo "modprobe br_netfilter" >> /etc/profile
[root@k8s-master ~]# vim  /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1 
net.ipv4.ip_forward = 1 
[root@k8s-master ~]# sysctl -p /etc/sysctl.d/k8s.conf

1.6、关闭 firewalld 防火墙和selinux

三台节点都需要做
[root@k8s-master ~]# systemctl stop firewalld && systemctl disable firewalld

#修改 selinux 配置文件之后,重启机器,selinux 配置才能永久生效
[root@k8s-master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

1.7、 配置阿里云的 repo 源

三台节点都需要配置
#安装 wget 命令
[root@k8s-master ~]# yum -y install wget
#备份基础 repo 源
[root@k8s-master ~]# mkdir /root/repo.bak
[root@k8s-master ~]# mv /etc/yum.repos.d/* /root/repo.bak
#下载阿里云的 repo 源
[root@k8s-master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@k8s-master ~]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
#配置国内阿里云 docker 的 repo 源
[root@k8s-master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#配置安装 k8s 组件需要的阿里云的 repo 源
[root@k8s-master ~]# 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=0
#运行 yum makecache 生成缓存
[root@k8s-master ~]# yum makecache

1.8、配置时间同步

三台节点都需要配置
#安装 ntpdate 命令
[root@k8s-master ~]# yum install ntpdate -y
#跟网络时间做同步
[root@k8s-master ~]# ntpdate cn.pool.ntp.org
#把时间同步做成计划任务
[root@k8s-master ~]# crontab -e
 * */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
 #重启 crond 服务
 [root@k8s-master ~]# systemctl  restart  crond.service

1.9、开启ipvs

三台节点都需要配置
[root@k8s-master ~]# vim  /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules}; do
 /sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1
 if [ 0 -eq 0 ]; then
 /sbin/modprobe ${kernel_module}
 fi
done
[root@k8s-master ~]#  chmod 755 /etc/sysconfig/modules/ipvs.modules  &&  bash /etc/sysconfig/modules/ipvs.modules  &&  lsmod | grep ip_vs

1.10、安装基础软件包

三台节点都需要安装
[root@k8s-master ~]#  yum install -y yum-utils device-mapper-persistent-data lvm2  net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl  curl-devel unzip sudo ntp libaio-devel  vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm

2、安装 docker 服务

2.1、安装 docker-ce

三台节点都需要安装
[root@k8s-master ~]#  yum install docker-ce-20.10.6 docker-ce-cli-20.10.6  containerd.io -y
[root@k8s-master ~]#  systemctl start docker && systemctl enable docker.service  && systemctl status  docker.service

2.2 、配置 docker 镜像加速器和驱动

三台节点都需要配置
[root@k8s-master ~]#  vim /etc/docker/daemon.json
{ 
 "registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com", "https://rncxm540.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] 
}
#修改 docker 文件驱动为 systemd,默认为 cgroupfs,kubelet 默认使用 systemd,两者必须一致才可以。
[root@k8s-master ~]#  systemctl daemon-reload && systemctl restart docker &&  systemctl status docker

3、安装初始化 k8s 需要的软件包

三台节点都需要安装
[root@k8s-master ~]# yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6 
[root@k8s-master ~]# systemctl enable kubelet  &&   systemctl status kubelet

kubeadm搭建测试环境k8s集群_第1张图片

#上面可以看到 kubelet 状态不是 running 状态,这个是正常的,不用管,等 k8s 组件起来这个 kubelet 就正常了。
注:每个软件包的作用
Kubeadm: kubeadm 是一个工具,用来初始化 k8s 集群的
kubelet: 安装在集群所有节点上,用于启动 Pod 的
kubectl: 通过 kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

4、kubeadm 初始化 k8s 集群

#把初始化 k8s 集群需要的离线镜像包上传到 三台机器上,手动解压(没有包的,可以忽略不做
[root@k8s-master ~]# docker load -i k8simage-1-20-6.tar.gz

#使用 kubeadm 初始化 k8s 集群
[root@k8s-master ~]#  kubeadm init --kubernetes-version=1.20.6 --apiserver-advertise-address=10.30.11.180 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification

注:–image-repository registry.aliyuncs.com/google_containers:手动指定仓库地址为
registry.aliyuncs.com/google_containers。kubeadm 默认从 k8s.grc.io 拉取镜像,但是
k8s.gcr.io 访问不到,所以需要指定从 registry.aliyuncs.com/google_containers仓库拉取镜像。

显示如下,说明安装完成:
kubeadm搭建测试环境k8s集群_第2张图片

kubeadm join 10.30.11.180:6443 --token pyfcsa.h2bbcgr67d1xt5hg
- -discovery-token-ca-cert-hash sha256:6ebd3797f8550e089968b23f2ca5b457c67c77768fe86e8b1ca0eddd3017cba6
#上面命令是把 node 节点加入集群,需要保存下来,每个人的都不一样

#配置 kubectl 的配置文件 config,相当于对 kubectl 进行授权,这样 kubectl 命令可以使用这个证书对 k8s 集群进行管理
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# chown $ (id -u):$(id -g) $HOME/.kube/config
[root@k8s-master ~]# kubectl  get nodes

在这里插入图片描述
#此时集群状态还是 NotReady 状态,因为没有安装网络插件。

5、扩容 k8s 集群-添加两个工作节点

在 k8s-master上查看加入节点的命令
[root@k8s-master ~]# kubeadm token create --print-join-command

在这里插入图片描述
把 k8s-node1和 k8s-node2 加入 k8s 集群:

在k8s-node1上执行命令
[root@k8s-node1 ~]# kubeadm join 10.30.11.180:6443 --token iel0ae.sno2znw28v5kup2k     --discovery-token-ca-cert-hash sha256:6ebd3797f8550e089968b23f2ca5b457c67c77768fe86e8b1ca0eddd3017cba6

在k8s-node2上执行命令
[root@k8s-node2 ~]# kubeadm join 10.30.11.180:6443 --token iel0ae.sno2znw28v5kup2k     --discovery-token-ca-cert-hash sha256:6ebd3797f8550e089968b23f2ca5b457c67c77768fe86e8b1ca0eddd3017cba6
k8s-master上查看集群节点状况
[root@k8s-master ~]# kubectl  get nodes

在这里插入图片描述
注意:上面状态都是 NotReady 状态,说明没有安装网络插件

可以看到 k8s-node1、k8s-node2 的 ROLES 角色为空,<none>就表示这个节点是工作节点。
可以把 k8s-node1 和 k8s-node2 的 ROLES 变成 work,按照如下方法:
[root@k8s-master ~]#  kubectl label node k8s-node1 node-role.kubernetes.io/worker=worker

[root@k8s-master ~]#  kubectl label node k8s-node2 node-role.kubernetes.io/worker=worker

6、安装 kubernetes 网络组件-Calico

下载 calico.yaml 到 k8s-master上,使用 yaml 文件安装 calico 网络插件
calico.yaml私我单发

[root@k8s-master ~]# kubectl apply -f /etc/kubernetes/calico/calico.yaml

查看calico的pod状态  #STATUS 状态是 Ready,说明 k8s 集群正常运行了

[root@k8s-master ~]# kubectl get pod -n kube-system

kubeadm搭建测试环境k8s集群_第3张图片

7、测试 k8s 集群中部署 tomcat 服务

[root@k8s-master ~]# vim  tomcat.yaml

apiVersion: v1  #pod属于k8s核心组v1
kind: Pod  #创建的是一个Pod资源
metadata:  #元数据
  name: demo-pod  #pod名字
  namespace: default  #pod所属的名称空间
  labels:
    app: myapp  #pod具有的标签
    env: dev      #pod具有的标签
spec:
  containers:      #定义一个容器,容器是对象列表,下面可以有多个name
  - name:  tomcat-pod-java  #容器的名字
    ports:
    - containerPort: 8080
    image: tomcat:8.5-jre8-alpine   #容器使用的镜像
    imagePullPolicy: IfNotPresent
    
[root@k8s-master ~]# kubectl apply -f tomcat.yaml   

[root@k8s-master ~]# kubectl get pods

在这里插入图片描述

[root@k8s-master ~]# vim   tomcat-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: tomcat
spec:
  type: NodePort
  ports:
    - port: 8080
      nodePort: 30080
  selector:
    app: myapp
    env: dev
[root@k8s-master ~]# kubectl apply -f tomcat-service.yaml

[root@k8s-master ~]#  kubectl get svc

在这里插入图片描述
在浏览器访问 k8s-node1 节点的 ip:30080 即可请求到浏览器
kubeadm搭建测试环境k8s集群_第4张图片

到此完结☺

哪里有问题随时沟通哦

你可能感兴趣的:(kubernetes,容器,云原生)