Centos搭建K8s

前言

  • 想自己搭建一套k8s来学习使用,没有那么多服务器就想用虚拟机来实现
  • k8s至少需要两台机器,我准备用三台机器一个master两个node

环境准备

  • Windows 11
  • VirtualBox 7.0(这个免费,VMware 收费,公司不能使用盗版软件)
  • centos镜像 CentOS-7-x86_64-DVD-2009.iso

系统安装

注意

  • 我们先安装配置一套虚拟机的环境,到后面再复制出来,这样省时省力

虚拟机配置

  • 导入镜像包,这个比较简单,我就不多说了,主要是虚拟机的网络配置
  • 设置两个网卡的网络模式,用来实现虚拟机内外网的正常通信

image.png

image.png

  • 查看本机IP,使用和自己电脑一个网段
    image.png

image.png

  • 修改网卡配置
vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
# 修改3个地方
BOOTPROTO=static  # 静态解析
ONBOOT=yes  #启动加载
IPADDR=192.168.56.102 # 自定义IP地址
  • 编辑/etc/hosts
    # 修改dns
    vim /etc/resolv.conf
    改成 nameserver 114.114.114.114

软件安装

  • 安装wget
    yum install wget net-tools ntp -y

  • 修改上海时区
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

  • 同步网络时间
    ntpdate 0.asia.pool.ntp.org

  • 设置centos阿里云镜像源

  • curl -o /etc/yum.repos.d/CentOS-Base.repo mirrors.aliyun.com/repo/Centos…

  • 设置k8s阿里云源

`cat <<EOF > /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 EOF`
  • 用于桥接的流量转发
modprobe br_netfilter echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables echo 1 > /proc/sys/net/ipv4/ip_forward
  • 添加配置文件
vim /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1
  • 关闭防火墙
    systemctl stop firewalld // 停止
    systemctl disable firewalld  //禁用
  • 关闭setlinx
    #永久关闭
   vim  /etc/selinux/config
   SELINUX=disabled
  • 关闭swap(从这开始没有每个机器都改 只改了master)
    • 临时关闭
      swapoff -a
    • 永久关闭注释最后一行
      vim /etc/fstab

image.png

  • 上海时区
    timedatectl set-timezone Asia/Shanghai

Docker 安装

安装docker

  • 安装docker
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

sudo yum install -y yum-utils


sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

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

sudo systemctl start docker

# 开机启动
systemctl enable docker

  • 修改docker配置
cat > /etc/docker/daemon.json <<EOF
{ 
    "registry-mirrors": ["https://5lnahg7c.mirror.aliyuncs.com"],
    "exec-opts": ["native.cgroupdriver=systemd"], //这个加上我有个奇怪的错误就是这么解决的
    "log-driver": "json-file","log-opts": {"max-size": "100m"}
}
EOF
  • 重新加载
systemctl daemon-reload

安装k8s

yum install -y kubeadm kubelet kubectl

复制虚拟机

  • 注意事项

安装完k8s就可以复制虚拟机了,后续的操作都是分节点操作了

image.png

image.png

复制后的操作

  • 配置主机名

    hostnamectl set-hostname master

  • 修改IP
    vim /etc/sysconfig/network-scripts/ifcfg-enp0s3

  • 用于桥接的流量转发[要重新配置]

    modprobe br_netfilter
    echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
    echo 1 > /proc/sys/net/ipv4/ip_forward
    

k8s 配置

初始化主节点

-   查看kubectl版本
kubectl version --short
- 修改 containerd 配置文件,在k8s1.24之后,通过--image-repository设置的镜像地址,不会传递给cri,需要自己修改配置文件
# 自动生成配置文件
containerd config default > /etc/containerd/config.toml
# 修改配置文件 
# 新增
vim /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false

#修改
vim /etc/containerd/config.toml
sandbox_image="registry.aliyuncs.com/google_containers/pause:x.x" 
# 地址的版本要看配置文件里面的版本,只修改前面的域名
  • 初始化脚本
kubeadm init --kubernetes-version=1.26.1 \
--apiserver-advertise-address=192.168.56.102 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
  • 初始化成功之后,按界面的提示运行下面三条命令

    mkdir -p $HOME/.kube
     sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
     sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

配置fannel网络

  • 这个是centos自带的,用的比较多
wget  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubectl apply -f kube-flannel.yml 

# 查看pod运行情况,可能no-ready需要等待一下
kubectl get po -n kube-system

安装dashboard

安装dashboard要和k8s版本匹配
版本查看

  • 将文件下载下来,修改一下配置
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
  • 添加外网端口,注意大小写

image.png

  • 应用配置
kubectl apply -f  recommended.yaml
  • 查看pod信息

    kubectl get pod -n kubernetes-dashboard

  • 查询所在节点信息

    kubectl get pod -o wide -n kubernetes-dashboard

  • 打开dashboard

    https://nodeip:port

账户

普通账户
# 创建账户 kubectl create serviceaccount dyb 
# 生成 kubectl create token dyb
超级管理员账户
# 创建 dashboard-admin 用户
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard
# 绑定 clusterrolebinding
kubectl create clusterrolebinding dashboard-admin-rb --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin
  • 创建 token

    cat > dashboard-admin-token.yaml<<EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: dashboard-admin-secret
      namespace: kubernetes-dashboard
      annotations:
        kubernetes.io/service-account.name: dashboard-admin
    type: kubernetes.io/service-account-token
    EOF
    
    
    
    kubectl apply -f dashboard-admin-token.yaml
    
  • 查看token

 kubectl describe secret dashboard-admin-secret -n kubernetes-dashboard

登录

  • 用token登录
    image.png
  • 首页

image.png

使用遇到的问题

  • 在node节点上执行kubectl get nodes 或者相关命令的时候,会提示
    The connection to the server localhost:8080 was refused - did you specify the right host or port?

    • 那是因为kubectl 命令需要kubernetes-admin 来运行,需要admin.conf文件,conf是kubeadm init初始化主节点的时候生成的,需要从主节点复制过去,再设置环境变量就行
# 从主节点拷贝
scp /etc/kubernetes/admin.conf 192.168.56.103:/etc/kubernetes/
# 设置环境变量
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYFkCaej' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片