k8s kubeadm搭建集群,版本1.20.4、常用配件、常用设置
k8s版本:1.20.4linux系统:centos7一、设置linux环境1.1 设置主机名hostnamectl set-hostname master1.2 关闭防火墙检查:systemctl status firewalldsystemctl disable firewalldsystemctl stopfirewalld1.3 禁用selinux检查:getenforce #Permis
k8s版本:1.20.4
linux系统:centos7
目录
2.2 安装yum的kubeadm、kubelet、kubectl
5.2 扩大service对外开放的端口范围(nodePort)
一、设置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. 免密登录
介绍:大数据时代:SSH如何免密码登录? (baidu.com)
A主机 -> B主机,免密:
A主机操作:
(1)确保生成过秘钥
查看秘钥:
ls ~/.ssh
id_rsa.pub id_rsa (需要的公钥、私钥)
生成秘钥:
ssh-keygen -t rsa #需要输入就直接回车
(2)复制公钥给B主机
scp /root/.ssh/id_rsa.pub root@192.168.102.30:/home/ssh_key_A # 蓝色的文件名随便写
B主机操作:
cat /home/ssh_key_A >> /root/.ssh/authorized_keys
关于 authorized_keys 这个文件:
-- 保存其他主机的公钥,保存到的主机就免密
-- 权限过高会使免密登录失效 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和块存储longhorn
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
longhorn:
(1)主机上安装并启用iscsi接口协议
yum install iscsi-initiator-utils
systemctl enable iscsid
systemctl start iscsid
(2)安装longhorn
yml文件或helm安装:在Rancher中安装基础存储Longhorn - 简书 (jianshu.com)
rancher的应用市场安装
五、设置
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
更多推荐
所有评论(0)