0
点赞
收藏
分享

微信扫一扫

centos7 安装 k8s


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

主机名

IP

Docker版本

主机配置

K8S版本

master01

192.168.159.171

20.10.0

2C8G

1.21.5

work01

192.168.159.172

20.10.0

2C8G

1.21.5

work02

192.168.159.173

20.10.0

2C8G

1.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

centos7 安装 k8s_docker


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

centos7 安装 k8s_centos_02


可以看到上面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}}"


举报

相关推荐

0 条评论