wordpress做站群,asp网站开发培训,缪斯国际设计,老房改造 装修公司一、概述
Kubernetes#xff08;[kubə’netis]#xff09;#xff0c;简称K8s#xff0c;是用8代替名字中间的8个字符“ubernete”而成的缩写#xff0c;它是一个由Google 开源的全新的分布式容器集群管理系统。
二、准备
IP角色内存192.168.1.130master4G192.168.1.1…一、概述
Kubernetes[kubə’netis]简称K8s是用8代替名字中间的8个字符“ubernete”而成的缩写它是一个由Google 开源的全新的分布式容器集群管理系统。
二、准备
IP角色内存192.168.1.130master4G192.168.1.131node2G192.168.1.132node2G
说明上述Linux环境网络适配器均为NAT模式Linux环境搭建请参考视频教程https://www.bilibili.com/video/BV15m4y1d7ZP/?spm_id_from333.999.0.0
三、安装
1、共性操作
该操作要求每个节点均需执行的相同操作包括修改hosts、时间同步、禁用firewalld、禁用selinux、禁用swap、网桥设置和安装K8s等。
a、修改hosts
命令
# cat /etc/hosts EOF
192.168.1.130 master
192.168.1.131 node1
192.168.1.132 node2
EOF
# cat /etc/hosts如果不修改hosts文件则node节点报如下错误
5月 18 14:27:23 localhost.localdomain kubelet[71288]: E0518 14:27:23.915453 71288 controller.go:187] failed to update lease, error: Operation cannot be fulfilled on leases.coordination.k8s.io localhost.localdomain: the object has been modified; please apply your changes to the latest version and try againb、时间同步
# systemctl start chronyd systemctl enable chronyd
# date c、禁用firewalld
# systemctl stop firewalld systemctl disable firewalld如果不禁用firewalld则出现如下警告
[WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctlyd、禁用selinux
# setenforce 0 sed -i s/^SELINUX.*/SELINUXdisabled/ /etc/selinux/confige、禁用swap
临时关闭, 重启失效
# swapoff -a永久关闭
# swapoff -a sed -i / swap / s/^\(.*\)$/#\1/g /etc/fstab默认情况下K8s为了追求高性能不建议使用交换分区为此它要求每个节点禁用swap否则各个节点中的kubelet无法运行。
f、网桥设置
# cat /etc/sysctl.d/kubernetes.conf EOF
net.bridge.bridge-nf-call-ip6tables 1
net.bridge.bridge-nf-call-iptables 1
net.ipv4.ip_forward 1
EOF# sysctl --systemg、docker安装
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# yum makecache fast
# yum -y install docker-ce
# systemctl enable docker systemctl start docker
# docker -v注意yum -y install docker只能安装docker-1.13.x老版本的docker2017年后版本有了CE社区版本和EE企业版本所以新版本使用yum -y install docker-ce
设置daemon.json
# mkdir -p /etc/docker
# tee /etc/docker/daemon.json -EOF
{exec-opts: [native.cgroupdriversystemd],registry-mirrors: [https://ha65u7j9.mirror.aliyuncs.com]
}
EOF
# systemctl daemon-reload systemctl restart docker在某个节点master节点或node节点中运行cat /var/lib/kubelet/config.yaml |grep group命令可以看出kubelet默认 cgoup 驱动为systemd而docker 默认驱动为 cgroupfs但K8s官网要求docker 和 kubelet 服务中的 cgroup 驱动必须一致为此设置daemon.json时添加了exec-opts: [“native.cgroupdriversystemd”]配置。
g、安装K8s
①、镜像
# cat /etc/yum.repos.d/kubernetes.repo EOF
[kubernetes]
nameKubernetes
baseurlhttp://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled1
gpgcheck0
repo_gpgcheck0
gpgkeyhttp://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# cat /etc/yum.repos.d/kubernetes.repo②、安装
# yum install -y kubeadm-1.23.17 kubectl-1.23.17 kubelet-1.23.17
# systemctl enable kubelet
# journalctl -xefu kubelet说明查看kubelet运行日志
2、异性操作
K8s环境搭建过程中有些命令需要在不同角色的节点执行异性操作罗列了不同角色计算机执行的命令
a、master
①、设置hostname
# hostnamectl set-hostname master②、初始化Kubernetes保存该命令输出的一个join命令该join命令需要在node角色的节点上执行
# kubeadm init \--apiserver-advertise-address192.168.1.130 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.23.17 \--service-cidr10.96.0.0/12 \--pod-network-cidr10.244.0.0/16 \--ignore-preflight-errorsall说明 –apiserver-advertise-address #集群通告地址(master 机器IP) –image-repository #由于默认拉取镜像地址k8s.gcr.io国内无法访问这里指定阿里云镜像仓库地址 –kubernetes-version #K8s版本与上面安装的一致 –service-cidr #集群内部虚拟网络Pod统一访问入口 –pod-network-cidr #Pod网络与下面部署的CNI网络组件yaml中保持一致 ③、环境配置
普通用户
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/configroot用户
# echo export KUBECONFIG/etc/kubernetes/admin.conf /etc/profile
# source /etc/profile如果不配置环境变量则执行时提示如下错误
# kubectl get node
The connection to the server localhost:8080 was refused - did you specify the right host or port?④、配置flannel
flannel[ˈflænl]和calico[ˈkælɪkoʊ]都是用于k8s节点之间容器网络通信的一个k8s组件flannel可以为不同node节点的分配不同的子网实现容器间的跨机通信从而实现整个kubenets层级通信。
— 下载
# cd /opt
# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml— 上传
# kubectl apply -f /opt/kube-flannel.ymlb、node
①、设置hostname
# hostnamectl set-hostname noden每个node节点都要执行上面命令n的值和/etc/hosts 文件从节点相一致。
②、执行kubeadm join命令该命令是master节点 初始化k8s时生成的
# kubeadm join 192.168.1.130:6443 --token 5hj7w9.kt3fnduortroodcd \--discovery-token-ca-cert-hash sha256:b6e461346caae2c96220ec38d5435d8863ded95383743105733615df74b0a496注意上面命令中token默认有效期为24小时过期后可以在master节点执行kubeadm token create --print-join-command重新创建token
③、环境配置
# echo export KUBECONFIG/etc/kubernetes/kubelet.conf /etc/profile
# source /etc/profile3、节点状态
# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 9m9s v1.23.17
node1 Ready none 2m29s v1.23.17
node2 Ready none 2m10s v1.23.174、问题解决
a、问题一
描述执行kubectl get node命令时发现有些节点一致处于NotReady状态在这些节点执行journalctl -xefu kubelet命令则提示如下错误
5月 19 06:15:21 master kubelet[6469]: E0519 06:15:21.849698 6469 kubelet.go:2394] Container runtime network not ready networkReadyNetworkReadyfalse reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
5月 19 06:15:24 master kubelet[6469]: I0519 06:15:24.336305 6469 cni.go:240] Unable to update cni config errno networks found in /etc/cni/net.d原因故障节点没有自动生成/etc/cni/net.d/10-flannel.conflist。
方案将正常节点上/etc/cni/net.d/10-flannel.conflist拷贝到故障节点对应目录。