k8s kubeadm搭建集群,版本1.20.4、常用配件、常用设置

k8s版本:1.20.4

linux系统:centos7

目录

一、设置linux环境

1.1 设置主机名

1.2 关闭防火墙

1.3 禁用selinux

1.4 关闭swap

1.5 设置内核参数

二、安装组件

2.1 安装docker

2.2 安装yum的kubeadm、kubelet、kubectl

(1)添加yum源

(2)yum安装

三、kubeadm搭建集群

3.1 master节点的操作

(可选)(0)提前下载docker镜像

(1)创建集群

3.2 node节点的操作

(可选)(0)配置时间同步、主机间免密登录

(1)加入集群

四、配件

4.1 网页ui的dashboard

4.2 win10上的kubectl

(1)下载地址

(2)加入系统环境变量

(3)远程连接k8s集群

4.3 资源监控的metrics-server

(1)下载地址

(2)安装插件

4.4 存储卷的网络文件系统(nfs)

(1)服务端

(2)客户端

五、设置

5.1 master节点去污(解除部署容器的限制)

5.2 扩大service对外开放的端口范围(nodePort)

5.3 cronJob调度者时区调整

六、其他

6.1 coredns问题


一、设置linux环境

1.1 设置主机名

-- 会影响到k8s集群的默认节点名

hostnamectl set-hostname master

1.2 关闭防火墙

-- 关防火墙只是为了放行端口

检查:systemctl status firewalld

systemctl disable firewalld

systemctl stop firewalld

1.3 禁用selinux

检查:getenforce   # Permissive 或 Disabled

setenforce 0

sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config

1.4 关闭swap

-- 说是为了不影响内存资源的判断

检查: free -m

临时禁用:swapoff -a

永久禁用:(修改配置文件  /etc/fstab)

sed -ri 's/.*swap.*/#&/' /etc/fstab

目的是注释这行:/dev/mapper/centos-swap swap                    swap    defaults        0 0

1.5 设置内核参数

-- 说是开启网桥

-- 也有说是允许通过iptables对网桥的数据包进行过滤、重定向等等

检查:sysctl --system

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

-- 关闭ipv6:net.ipv6.conf.all.disable_ipv6=1

默认允许iptable封包传输

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F

二、安装组件

2.1 安装docker

https://blog.csdn.net/u013595395/article/details/110401803

2.2 安装yum的kubeadm、kubelet、kubectl

(1)添加yum源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

(可选)下载rpm包并导出,复制到另一台主机并导入

-- 解除yum锁定
rm -rf /var/run/yum.pid

-- 导出rpm包
vi /etc/yum.conf 修改 keepcache=1
yum -y install yum-plugin-downloadonly  或  yum -y install yum-utils

mkdir /home/k8s
yum install --downloadonly --downloaddir=/home/k8s kubelet-1.20.4
yum install --downloadonly --downloaddir=/home/k8s kubeadm-1.20.4
yum install --downloadonly --downloaddir=/home/k8s kubectl-1.20.4
ls /home/k8s

蓝奏云:https://wws.lanzous.com/itWtAm17n7a

-- 导入并安装刚才的rpm包
rpm -ivh *.rpm 或 rpm -Uvh *.rpm(i安装 U升级)

(2)yum安装

yum install -y kubelet-1.20.4 kubeadm-1.20.4 kubectl-1.20.4

systemctl enable kubelet      # 关于kubelet,后面的步骤中kubeadm会启动它。这里配置开机自启就够了。

三、kubeadm搭建集群

3.1 master节点的操作

(可选)(0)提前下载docker镜像

1. 查看所需镜像
kubeadm config images list --kubernetes-version v1.20.4

得:

k8s.gcr.io/kube-apiserver:v1.20.4
k8s.gcr.io/kube-controller-manager:v1.20.4
k8s.gcr.io/kube-scheduler:v1.20.4
k8s.gcr.io/kube-proxy:v1.20.4
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0

-- k8s.gcr.io 改成 registry.aliyuncs.com/google_containers , 就是阿里的镜像
-- 示例使用阿里镜像

2. 再加一个flannel:

quay.io/coreos/flannel:v0.13.1-rc2

3. 再加一个ui:

kubernetesui/metrics-scraper:v1.0.4
kubernetesui/dashboard:v2.2.0         #  后文的yaml文件里默认是 kubernetesui/dashboard:v2.0.0-rc7

csdn链接:https://download.csdn.net/download/u013595395/15434637

-- docker导出镜像

单个导出:docker save fluent/fluentd:v1.3.2-debian-1.0 -o /home/efk-f
全部导出:docker save $(docker images --format '{ {.Repository}}:{ {.Tag}}') -o /home/k8s-1.20.4.image

-- docker导入镜像

docker load -i /home/efk-f

(1)创建集群

1. 初始化

kubeadm init \
 --apiserver-advertise-address=192.168.102.133 \
 --image-repository registry.aliyuncs.com/google_containers \
 --kubernetes-version v1.20.4 \
 --service-cidr=10.96.0.0/12 \
 --pod-network-cidr=10.244.0.0/16 \
 --ignore-preflight-errors=all

-- 第二行的ip要改

-- 最后一行一般不加,作用是忽略所有检查错误

-- 忽略swap检查:--ignore-preflight-errors=Swap

-- 重置:kubeadm reset

2. 执行初始化后提示要运行的命令(目的是配置kubectl)

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

附:

kubeadm join 192.168.102.133:6443 --token 8hpddh.7w4poi5d8dknamf1 \
    --discovery-token-ca-cert-hash sha256:a842a9d21a6aec88aaf5d20f4dc298a8b4e0004fa309c19038bd4f51724ab57c 

-- 这句在从节点的主机上执行,用来让从节点加入集群

-- token默认24小时过期

-- 从节点加入集群时,会自动安装网络插件的容器。从节点没配置国内镜像仓库的话,就会卡在pull镜像。

3. 安装网络插件:示例选flannel

(选一)(flannel)kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

蓝奏云:https://wws.lanzous.com/ij1gCm1ba4d

(选一)(calico)kubectl apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml

4. 查看节点状态

kubectl get nodes
kubectl get pods --all-namespaces

3.2 node节点的操作

首先,第一、二、大步,node节点也得做。

(可选)(0)配置时间同步、主机间免密登录

1. 时间同步

(1)安装ntp

yum install -y ntp

(rpm包)蓝奏云:https://wws.lanzous.com/iDSivm2xxxi

(2)ntp服务器操作

修改配置文件 /etc/ntp.conf

#-- restrict
restrict 127.0.0.1   # restrict 用来限制外部访问,也用来配置客户端权限
restrict 192.168.102.0 mask 255.255.255.0     # 还可以加上掩码来指定一片地址。
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap   # 最后的一些单词指定客户端权限,没写,就是获得全部权限

#-- server
server 127.127.1.0   # server用来指定server服务器,127.127.1.0是自己

#-- fudge
fudge 127.127.1.0 stratum 10   # fudge用来指定“层级”。这里把自己当第10层,谁同步我谁就是第11层,最大15层。可选值【0-15】

运行ntp服务

systemctl start ntpd
systemctl enable ntpd

(3)ntp客户端操作

修改配置文件 /etc/ntp.conf

-- server
server 192.168.102.3   # 指定自己的ntp服务器

先手动同步一次时间

ntpdate 192.168.102.3

再运行ntp服务

systemctl start ntpd
systemctl enable ntpd

2. 免密登录

A主机 -> B主机,免密:

A主机操作:

(1)生成秘钥

ssh-keygen -t rsa   #需要输入就直接回车

(2)复制秘钥给自己的秘钥库、以及复制给B主机

cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

scp /root/.ssh/id_rsa.pub [email protected]:/home/ssh_key_A    # 蓝色的文件名随便写

B主机操作:

(1)cat /home/ssh_key_A >> /root/.ssh/authorized_keys

A到B现在免密了。B到A免吗?不免,得反过来再操作一遍。

-- root用户不会有权限问题,其他用户不好说:chmod 600 authorized_keys   # 修改权限

(1)加入集群

重新获取token和sha hash

token:
检查:kubeadm token list | awk -F" " '{print $1}' | tail -n 1
新建:kubeadm token create 

sha hash:

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

加入集群

kubeadm join 192.168.102.133:6443 --token 9hwd81.kytkqfr7f69uh9x0 --discovery-token-ca-cert-hash sha256:f9203224d2c3a533b3837cdf282b7c1ff9b7b2868f727fcb4839edc2e565bd13

四、配件

4.1 网页ui的dashboard

https://blog.csdn.net/qq_36338555/article/details/109197621

1. kubectl apply -f https://gitee.com/zmhcode/k8s-config/raw/master/dashboard.yaml

或 下载后 kubectl apply -f dashboard.yaml

蓝奏云:https://wws.lanzous.com/i1Tz4m1r5gb

-- create类似insert,apply类似save(先select,没有就insert,有就update)

-- 蓝奏云的配置,我修改了3个地方:(1)版本-> 2.2.0  #199行 (2)镜像拉取策略从远程 -> 先本地再远程 #200行 (3)token过期时间从15分钟 -> 30天 #207行

2. 检查:kubectl get pod -A

过一会,都running后

3. 查找秘钥对象

kubectl get secret -n kubernetes-dashboard | grep dashboard-admin

4. 查看对象存储的token

kubectl describe secret dashboard-admin-token-8kjlc -n kubernetes-dashboard

5. 访问 https://192.168.102.133:32000

4.2 win10上的kubectl

(1)下载地址

1. https://storage.googleapis.com/kubernetes-release/release/v1.20.4/bin/windows/amd64/kubectl.exe

2. https://dl.k8s.io/release/v1.20.4/bin/windows/amd64/kubectl.exe

(2)加入系统环境变量

-- "此电脑"右键 -> 属性 :打开图上的页面

-- 0-8步

-- 第8步点完"确定"后,剩下的页面都点"确定"来关闭

复制一下文件,重命名。也可以这样来当别名

-- 正经方式:doskey

(3)远程连接k8s集群

1. 复制k8s集群master节点上的config文件

路径:~/.kube/config   或   /root/.kube/config   (root用户安装是root,其他用户改成相应用户名)

2. 在win10的用户文件夹内,建立.kube文件夹,在其中放入上一步的config文件

4.3 资源监控的metrics-server

(1)下载地址

官网:https://github.com/kubernetes-sigs/metrics-server/releases

版本0.4.2

(镜像和yaml文件)蓝奏云:https://wws.lanzous.com/iqa5Ambckch

-- 修改第134行,不验证Kubelets提供的证书的CA

(2)安装插件

kubectl apply -f metrics-server-0.4.2.yaml

-- 文件中镜像在外网,需要把下好的镜像导入docker

-- 否则报错

最后在网页上的效果

-- CPU使用率的 2.00m:m指千分之一个cpu,2m代表使用千分之二个cpu,100m代表使用0.1个cpu

-- 不写单位则是个:1 = 1000m 代表使用1个cpu

4.4 存储卷的网络文件系统(nfs)

(1)服务端

1.安装rpc服务(nfs依赖他),nfs服务

yum install -y nfs-utils rpcbind

蓝奏云:https://wws.lanzous.com/iy5XZmoeq5g

2.设置配置文件(/etc/exports)

/a_data    *(rw,sync,no_root_squash)
/a_soft    *(rw,sync,no_root_squash)

-- 第一列是开出去的目录,第二列是允许访问的网段,第三列是权限设置。(二、三列不空格)

-- ro 只读  rw 读写  sync 同步写入  no_root_squash 允许客户端用root身份使用目录

3.设置开机自启,并启动(先rpc,再nfs)

systemctl enable rpcbind
systemctl enable nfs
systemctl start rpcbind
systemctl start nfs

查看:exportfs -v    或    showmount -e localhost 

通过配置文件更新 exportfs -ar

(2)客户端

1.安装rpc服务(nfs依赖他),nfs服务

yum install -y nfs-utils rpcbind

2.设置rpc开机自启,并启动

3.挂载目录

(1)手动挂载

mount -t nfs 192.168.1.102:/a_data /nfs/master/a_data

(2)开机自动挂载:

# vim /etc/fstab 

192.168.1.102:/a_data     /nfs/master/a_data       nfs     defaults        0 0

五、设置

5.1 master节点去污(解除部署容器的限制)

kubectl taint nodes master node-role.kubernetes.io/master:NoSchedule-

5.2 扩大service对外开放的端口范围(nodePort)

修改配置文件:/etc/kubernetes/manifests/kube-apiserver.yaml

添加:- --service-node-port-range=1-65535

-- 文件修改后,会自动应用配置

5.3 cronJob调度者时区调整

修改配置文件:/etc/kubernetes/manifests/kube-controller-manager.yaml

添加以下内容:

spec:
    volumeMounts:
    - name: localtime
      mountPath: /etc/localtime
    - name: timezone
      mountPath: /etc/timezone
    env:
    - name: TZ
      value: Asia/Shanghai

  volumes:
  - name: localtime
    hostPath: 
      path: /a_soft/k8s/env/localtime
      type: FileOrCreate
  - name: timezone
    hostPath: 
      path: /a_soft/k8s/env/timezone
      type: FileOrCreate

-- 文件修改后,会自动应用配置

六、其他

6.1 coredns问题

表现:dial tcp 10.96.0.1:443: connect: no route to host

原因:iptables规则乱了

解决:清除规则,k8s和docker设置的规则会自动重新写上,但自己写的会丢失

systemctl stop kubelet
systemctl stop docker
iptables --flush
iptables -tnat --flush
systemctl start kubelet
systemctl start docker

附:虚拟机网卡丢失

chkconfig network off
chkconfig network on
service NetworkManager stop
service NetworkManager start

systemctl stop NetworkManager
systemctl restart network.service

目录:https://blog.csdn.net/u013595395/article/details/114527658

猜你喜欢

转载自blog.csdn.net/u013595395/article/details/113974330