docker版本:docker-ce-20.10.0-3.el7.x86_64
k8s版本:1.21.5

主机名IPDocker版本主机配置K8S版本
master01192.168.159.17120.10.02C8G1.21.5
work01192.168.159.17220.10.02C8G1.21.5
work02192.168.159.17320.10.02C8G1.21.5

配置网络:

vi  /etc/sysconfig/network-scripts/ifcfg-ens33
ONBOOT=yes   #代表启动网卡
IPADDR=192.168.0.116
GATEWAY=192.168.0.1
NETMASK=255.255.255.0
MM_CONTROLLED=no
  1. 使用yum命令安装依赖包
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
  1. 使用mv命令将原yum源备份。
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
  1. 使用wget命令下载阿里yum源。
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  1. 将yum源清理一下,并将阿里yum源生效。
yum clean all
yum makecache
  1. 使用以下命令查看防火墙状态,并关闭防火墙。显示not running为防火墙关闭状态。
# 查看防火墙状态
firewall-cmd --state
# 临时停止防火墙
systemctl stop firewalld.service
# 禁止防火墙开机启动
systemctl disable firewalld.service
  1. 使用以下命令查看selinux状态,并关闭selinux。
# 查看selinux状态
getenforce
# 临时关闭selinux
setenforce 0
# 永久关闭selinux
sed -i 's/^ *SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  1. 使用以下命令关闭swap内存交换
# 临时关闭swap
swapoff -a
# 永久关闭swap
sed -i.bak '/swap/s/^/#/' /etc/fstab
  1. 使用以下命令修改内核参数。
# 修改ipv4
sysctl -w net.ipv4.ip_forward=1
# 添加k8s.conf
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 生效内核参数
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
  1. 新增kubernetes的阿里源
yum -y install yum-utils 
yum-config-manager --add-repo   http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 添加kubernetes源
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
  1. 使用以下命令,刷新yum源。
yum clean all
yum -y makecache

调整内核参数,对于 K8S

cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.overcommit_memory=1 # 不检查物理内存是否够用
vm.panic_on_oom=0 # 开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf

升级linux内核

CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定,例如: rpm -Uvh
http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# 安装完成后检查/boot/grub2/grub.cfg中对应内核menuentry中是否包含initrd16配置,如果没有,再安装一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt
#设置开机从新内核启动
grub2-set-default 'CentOS Linux(4.4.189-1.el7.elrepo.x86_64) 7 (Core)'

关闭不需要的服务

systemctl stop postfix && systemctl disable postfix

设置rsyslogd和systemd journald

mkdir /var/log/journal # 持久化保存日志的目录
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
# 持久化保存到磁盘
Storage=persistent
# 压缩历史日志
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
# 最大占用空间 10G
SystemMaxUse=10G
# 单日志文件最大 200M
SystemMaxFileSize=200M
# 日志保存时间 2 周
MaxRetentionSec=2week
# 不将日志转发到 syslog
ForwardToSyslog=no
EOF
systemctl restart systemd-journald
  1. Docker安装
# yum安装docker-ce
yum -y install docker-ce-20.10.0-3.el7.x86_64

# 启动docker
systemctl start docker
systemctl status docker

# 查看dockers版本
docker --version

# 设置Docker开机启动。
systemctl enable docker.service
systemctl enable containerd.service
  1. 配置daemon.json文件
    docker安装后默认没有daemon.json这个配置文件,需要进行手动创建。配置文件的默认路径:/etc/docker/daemon.json
# 创建daemon.json文件,并设置镜像加速器。
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://2ywfua5b.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

在这里插入图片描述
13. 使用以下命令重新加载daemon.json配置,并重启Docker

systemctl daemon-reload
systemctl restart docker
  1. 使用以下命令,验证机器的mac地址和UUID是否相同。
# 查看mac地址
cat /sys/class/net/eth0/address
# 查看UUID
cat /sys/class/dmi/id/product_uuid
  1. 使用以下命令,修改机器的主机名。
    注意:三台机器主机名都需要修改
hostnamectl set-hostname master01
more /etc/hostname
  1. 使用以下命令,修改hosts文件。
cat >> /etc/hosts << EOF
172.23.191.212   master01
172.23.191.213   work01 
172.23.191.214   work02
EOF
  1. 重启三台机器,使上面更改的配置全部生效!

安装K8S

  1. 使用yum list命令,列出所支持的版本。
# 注意:横杠(-)之前的才是版本号。
yum list kubelet --showduplicates | sort -r
  1. 安装kubelet、kubeadm、kubectl
    使用yum install命令安装指定的K8S版本。
    三台机器都需要执行以下操作
yum install -y kubelet-1.21.5 kubeadm-1.21.5 kubectl-1.21.5
  1. 启动kubelet服务,并设置开机自启。
systemctl enable kubelet && systemctl start kubelet
  1. 使用kubeadm命令、查看当前k8s所需的镜像版本。
kubeadm config images list

在这里插入图片描述
可以看到上面k8s所需的镜像版本是1.22.4。跟安装指定的版本并不相同,这个并不影响,可以自定义修改版本。

只需要关注如:pause、etcd、coredns的版本即可。

因为k8s这些镜像都是国外的,直接访问下载镜像可能会有问题。

编写拉取镜像脚本,从阿里云镜像仓库下载所需版本。

注意:脚本需要在三台机器上都编写。都需要拉取镜像

创建images.sh文件:

#!/bin/bash
url=registry.cn-hangzhou.aliyuncs.com/google_containers
# 安装指定的kubectl版本
version=v1.21.5
# 上面查出来的coredns版本号
coredns=1.8.0
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; do
   if [ $imagename = "coredns" ]
   then
      docker pull $url/coredns:$coredns
      docker tag $url/coredns:$coredns k8s.gcr.io/coredns/coredns:v1.8.0
      docker rmi -f $url/coredns:$coredns
   else
      docker pull $url/$imagename
      docker tag $url/$imagename k8s.gcr.io/$imagename
      docker rmi -f $url/$imagename
  fi
done

修改images.sh脚本权限,改为可执行权限。

chmod +x images.sh

执行images.sh脚本,拉取镜像

./images.sh
  1. 使用docker images命令,查看镜像
docker images

# 如果更新错版本则删除重新更新
docker rmi IMAGEID

初始化K8S集群

  • 在master01机器上执行初始化集群命令。
    注意:该命令只需在master01上执行
kubeadm init --kubernetes-version=1.21.5 --apiserver-advertise-address=172.23.191.212 --pod-network-cidr=10.244.0.0/16
  • kubernetes-version # 指定的版本
  • apiserver-advertise-address # K8S主节点的地址
  • pod-network-cidr # pod的网络IP范围,在以往使用过程中,不设置该参数似乎创建的集群也能正常工作,k8s内部的pod节点之间网络可以使用的IP段,不能和service-cidr写一样,如果不知道怎么配,就先用这个10.244.0.0/16
  1. 记录初始化集群命令后,k8s给你生成的加入集群命令。
kubeadm join 172.23.191.212:6443 --token g9us9z.k7238w3kepyxl4nq \
        --discovery-token-ca-cert-hash sha256:1187c1e821d25802062e03930cd85e6dccd6f4e8ade0229407925bcdaf6bf875

# 查看节点加入集群的命令
kubeadm token create --print-join-command
  1. 执行k8s集群初始化给你生成的创建目录和复制配置文件命令。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. 在work01和work02两台机器上的根目录执行你刚才记录的加入K8S集群命令。
kubeadm join 172.23.191.212:6443 --token g9us9z.k7238w3kepyxl4nq \
        --discovery-token-ca-cert-hash sha256:1187c1e821d25802062e03930cd85e6dccd6f4e8ade0229407925bcdaf6bf875
  1. 在master01机器上执行以下命令,查看k8s集群节点。
kubectl get nodes
  1. 安装Calico网络插件
    使用curl命令下载Calico网络插件的YAML文件。
curl https://docs.projectcalico.org/manifests/calico.yaml -O
  1. 使用kubectl apply应用刚刚下载好的calico.yaml文件。
kubectl apply -f calico.yaml
  1. 使用以下命令查看当前K8S集群的pods
kubectl get pods -o wide -n kube-system

如果一直报:

The connection to the server localhost:8080 was refused - did you specify the right host or port?

这个错的话执行下面这两个话即可:

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile

重新安装后如果节点重新连不上主节点则重启后再init即可:

kubeadm reset

kubeadm join 192.168.0.122:6443 --token tvc4hp.gji6nndx3pzhle80 \
	--discovery-token-ca-cert-hash sha256:02fec8528653070cbfbd91cf3b00aee144228f2ace84b9d842a304ab365478f7

安装kubernetes dashboard(运行起来后都用不了后来没有再看)

官方地址,对照安装的k8s版本来安装仪表盘:

https://github.com/kubernetes/dashboard/releases

官方安装命令:

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

如果获取yaml文件失败,可以先通过浏览器打开该yaml文件,然后复制所有内容再本地创建一个yaml文件

kubectl apply -f 本地的.yaml文件

查看是否安装成功

kubectl get svc -n kubernetes-dashboard

kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kubernetes-dashboard

kubectl get svc -n kubernetes-dashboard

443后面那个就是可以访问的端口,看下是哪个节点可以请求

查看token

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

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐