k8s学习笔记(一):k8s单主架构部署

文章目录

k8s单主架构安装部署

环境准备

3台全新的centos7.9的系统,cpu 4核 内存2G 磁盘200G

环境说明

  • podSubnet(pod网段) 10.244.0.0/16
  • serviceSubnet(service网段): 10.96.0.0/16
  • 物理机网段:192.168.31.0/24

集群架构

K8S集群角色 ip 主机名 安装组件
控制节点 192.168.31.180 k8s-master apiserver、control manager、scheduler、etcd、kube-proxy、docker、calico
工作节点 192.168.31.181 k8s-node-1 kublet、kube-proxy、docker、calico、coredns
工作节点 192.168.31.182 k8s-node-2 kublet、kube-proxy、docker、calico、coredns

安装步骤

一、初始化安装k8s集群的实验环境(三台k8s都要进行操作,为了方便,我只记录了一台的操作)

1.根据集群架构配置好主机ip,主机名

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static 
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.31.180
PREFIX=24
GATEWAY=192.168.31.1
DNS1=114.114.114.114
[root@localhost ~]# hostnamectl set-hostname k8s-master
[root@localhost ~]# su
[root@k8s-master ~]#

另外两台配置类似,按照集群架构配置好ip、主机名

2.所有节点关闭防火墙,关闭selinux

[root@k8s-master ~]# service firewalld stop #临时关闭防火墙
Redirecting to /bin/systemctl stop firewalld.service
[root@k8s-master ~]# systemctl disable firewalld #永久关闭防火墙
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@k8s-master ~]# setenforce 0 #临时关闭selinux
[root@k8s-master ~]# getenforce 
Permissive
[root@k8s-master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  #永久关闭selinux

作用:防止k8s集群主机间通信受阻

其他两台操作一致

3. 修改/etc/hosts文件,相互之间通过主机名访问

所有节点操作

[root@k8s-master ~]# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.31.180 k8s-master
192.168.31.181 k8s-node-1
192.168.31.182 k8s-node-2

4.所有节点互相建立免密通道

k8s-master

[root@k8s-master ~]# ssh-keygen
[root@k8s-master ~]# ssh-copy-id k8s-node-1
[root@k8s-master ~]# ssh-copy-id k8s-node-2

k8s-node-1

[root@k8s-node-1 ~]# ssh-keygen
[root@k8s-node-1 ~]# ssh-copy-id k8s-master
[root@k8s-node-1 ~]# ssh-copy-id k8s-node-2

k8s-node-2

[root@k8s-node-2 ~]# ssh-keygen
[root@k8s-node-2 ~]# ssh-copy-id k8s-master
[root@k8s-node-2 ~]# ssh-copy-id k8s-node-1

5.关闭交换分区swap,提升性能

三台都做

[root@k8s-master ~]# swapoff -a

作用:尽可能使用内存,不使用磁盘交换分区,提升性能
k8s设计的时候为了能提升性能,默认是不允许使用交换分区的Kubeadm初始化的时候会检测swap是否关闭,如果没关闭,那就初始化失败。如果不想要关闭交换分区,安装k8s的时候可以指定–ignore-preflight-errors=Swap来解决。

永久关闭交换分区

[root@k8s-master ~]# vim /etc/fstab

在这里插入图片描述

6.修改机器内核参数

三台都做

[root@k8s-master ~]# modprobe br_netfilter            #可以解决 sysctl -p /etc/sysctl.d/k8s.conf出现报错:
[root@k8s-master ~]# echo "modprobe br_netfilter" >> /etc/profile               #设置开机启动
[root@k8s-master ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> net.ipv4.ip_forward = 1
> EOF
[root@k8s-master ~]# sysctl -p /etc/sysctl.d/k8s.conf                   #从指定的文件加载系统参数

7.配置阿里云的repo源

[root@k8s-master ~]# yum install -y yum-utils
[root@k8s-master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

配置国内docker镜像源,在后续拉取镜像时能快很多

8.安装好集群所需要的所有依赖包

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

9.配置安装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

10.配置时间同步

安装ntpdate命令

[root@k8s-master ~]# yum install -y ntpdate

同步网络时间

[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 ~]# service crond restart

二、安装docker服务(三台k8s主机都操作)

1.安装docker-ce

安装docker

[root@k8s-master ~]# yum install docker-ce-20.10.6 -y

自启+开机自启

[root@k8s-master ~]# systemctl start docker && systemctl enable docker.service

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"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认使用systemd,两者必须一致才可以

刷新systemd并重启docker
[root@k8s-master ~]# systemctl daemon-reload  && systemctl restart docker
查看docker运行状态
[root@k8s-master ~]# systemctl status docker

在这里插入图片描述

三、安装初始化k8s需要的软件包(三台k8s主机都操作)

1.安装kubeadm,kubelet,kubectl

[root@k8s-master ~]# yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6

2.开机自启kubelet

[root@k8s-master ~]# systemctl enable kubelet
软件 作用
Kubeadm kubeadm是一个工具,用来初始化k8s集群的
Kubelet 安装在集群所有节点上,用于启动Pod的
Kubectl 通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

四、导入离线镜像包,加快后续镜像拉取的速度

1.把初始化k8s集群需要的离线镜像包上传到三台k8s主机

镜像压缩包通过xftp上传到k8s主机的家目录下

[root@k8s-master ~]# ls
anaconda-ks.cfg  k8simage-1-20-6.tar.gz

scp到另外两台主机

[root@k8s-master ~]# scp k8simage-1-20-6.tar.gz 192.168.31.181:/root
[root@k8s-master ~]# scp k8simage-1-20-6.tar.gz 192.168.31.182:/root

2.docker load导入镜像

[root@k8s-master ~]# docker load -i k8simage-1-20-6.tar.gz

五、Kubeadm初始化k8s集群(只在master上做)

1.生成kubeadm.yaml文件

[root@k8s-master ~]# kubeadm config print init-defaults > kubeadm.yaml

2.修改kubeadm.yaml文件的相关配置

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

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.31.180
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.20.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

在这里插入图片描述

特别提醒:–image-repository registry.aliyuncs.com/google_containers为保证拉取镜像不到国外站点拉取,手动指定仓库地址为registry.aliyuncs.com/google_containers。kubeadm默认从k8s.gcr.io拉取镜像。 我们本地有导入到的离线镜像,所以会优先使用本地的镜像。

mode: ipvs 表示kube-proxy代理模式是ipvs,如果不指定ipvs,会默认使用iptables,但是iptables效率低,所以我们生产环境建议开启ipvs

3.基于kubeadm.yaml文件初始化k8s

[root@k8s-master ~]# kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification

在这里插入图片描述

4.配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理

[root@k8s-master ~]#   mkdir -p $HOME/.kube
[root@k8s-master ~]#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]#   sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看节点信息

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE    VERSION
k8s-master   NotReady   control-plane,master   177m   v1.20.6

发现只有master,因为另外两个节点还未加入到master中

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

master上查看加入节点的命令

[root@k8s-master ~]# kubeadm token create --print-join-command
kubeadm join 192.168.31.180:6443 --token bnokqt.324m0mxrhv7z7je3     --discovery-token-ca-cert-hash sha256:7013fd8145494ded4993d3d1d96cde925fe06e14c953841fcdb85fd33a315298

加入node1节点

[root@k8s-node-1 ~]# kubeadm join 192.168.31.180:6443 --token abcdef.0123456789abcdef     --discovery-token-ca-cert-hash sha256:7013fd8145494ded4993d3d1d96cde925fe06e14c953841fcdb85fd33a315298

加入node2节点

[root@k8s-node-2 ~]# kubeadm join 192.168.31.180:6443 --token abcdef.0123456789abcdef     --discovery-token-ca-cert-hash sha256:7013fd8145494ded4993d3d1d96cde925fe06e14c953841fcdb85fd33a315298

master上查看节点信息

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE     VERSION
k8s-master   NotReady   control-plane,master   3h4m    v1.20.6
k8s-node-1   NotReady   <none>                 5m4s    v1.20.6
k8s-node-2   NotReady   <none>                 4m55s   v1.20.6

加入成功!

可以把k8s-node-1和k8s-node-2的ROLES变成work

[root@k8s-master ~]# kubectl label node k8s-node-1 node-role.kubernetes.io/worker=worke
node/k8s-node-1 labeled
[root@k8s-master ~]# kubectl label node k8s-node-2 node-role.kubernetes.io/worker=worke
node/k8s-node-2 labeled
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE     VERSION
k8s-master   NotReady   control-plane,master   3h10m   v1.20.6
k8s-node-1   NotReady   worker                 10m     v1.20.6
k8s-node-2   NotReady   worker                 10m     v1.20.6

七、安装kubernetes网络组件-Calico(master上做)

1.上传calico.yaml文件到家目录下

[root@k8s-master ~]# ls
anaconda-ks.cfg  calico.yaml  k8simage-1-20-6.tar.gz  kubeadm.yaml

2.yaml文件安装calico 网络插件

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

3.查看节点状态

[root@k8s-master ~]# kubectl get node
NAME         STATUS   ROLES                  AGE     VERSION
k8s-master   Ready    control-plane,master   3h16m   v1.20.6
k8s-node-1   Ready    worker                 16m     v1.20.6
k8s-node-2   Ready    worker                 16m     v1.20.6

在这里插入图片描述

发现状态都变为了ready状态,恭喜你,k8s一主两从架构就成功搭建好了!

猜你喜欢

转载自blog.csdn.net/qq_57629230/article/details/131314823