kubernetes(centos)
1、安装Docker
请在三台机器上安装docker,执行下面的命令即可
查看系统内核版本信息:
uname -r
卸载旧版本:
yum remove docker docker-common docker-selinux docker-engine
yum remove docker-ce
卸载后将保留 /var/lib/docker 的内容(镜像、容器、存储卷和网络等)
rm -rf /var/lib/docker
1.安装依赖软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
#安装前可查看device-mapper-persistent-data和lvm2是否已经安装
rpm -qa|grep device-mapper-persistent-data
rpm -qa|grep lvm2
2.设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.更新yum软件包索引
yum makecache fast
安装
安装最新版本docker-ce
yum install docker-ce -y
#安装指定版本docker-ce可使用以下命令查看
yum list docker-ce.x86_64 --showduplicates | sort -r
# 安装完成之后可以使用命令查看
docker version
配置镜像加速
1.注册登录开通阿里云容器镜像服务
2.查看控制台,招到镜像加速器并复制自己的加速器地址
3.找到/etc/docker目录下的daemon.json文件,没有则直接 vi
daemon.json
4.加入以下配置
#填写自己的加速器地址
{
"registry-mirrors": ["https://zfzbet67.mirror.aliyuncs.com"]
}
5.通知systemd重载此配置文件;
systemctl daemon-reload
6.重启docker服务
systemctl restart docker
2、安装Kubernetes
1、基本环境 每个机器使用内网ip互通 每个机器配置自己的hostname,不能用localhost
三台机器设置hostname #设置每个机器自己的hostname hostnamectl set-hostname xxx 例如: hostnamectl set-hostname master hostnamectl set-hostname node1 hostnamectl set-hostname node2
基础设置(三台机器全部都要设置) # 将 SELinux 设置为 permissive 模式(相当于将其禁用) sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config #关闭swap关闭分区 swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab #允许 iptables 检查桥接流量 cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system
2、安装kubelet、kubeadm、kubectl(三台机器全部都要设置) #配置k8s的yum源地址 cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF #安装 kubelet,kubeadm,kubectl sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 #启动kubelet sudo systemctl enable --now kubelet
⚠️ 注意⚠️ : 三台机器同时写一个域名来配置master节点的ip地址
#所有机器配置master域名 echo "172.31.0.4 k8s-master" >> /etc/hosts
3、初始化master节点 1、初始化 ⚠️ - apiserver-advertise-address = 你master节点的ip ⚠️ - control-plane-endpoint = 你上面配置的域名 kubeadm init \ --apiserver-advertise-address=172.31.0.4 \ --control-plane-endpoint=k8s-master \ --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \ --kubernetes-version v1.20.9 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=192.168.0.0/16
2、记录关键信息 当前初始化完成之后将会输出下面的信息,记得保存到本地哦 ⚠️下面的操作将用到这个输出的内容,下面的操作请不要复制我这里的命令,以自己的实际输出为准 Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of control-plane nodes by copying certificate authorities and service account keys on each node and then running the following as root: kubeadm join k8s-master:6443 --token ajzsi9.y5h7yqpoxpyw7kqk \ --discovery-token-ca-cert-hash sha256:07d800f2a5d7114dc3c42361b09f3e71ba836d9b5366e10252b852e507b099f3 \ --control-plane Then you can join any number of worker nodes by running the following on each as root: kubeadm join k8s-master:6443 --token ajzsi9.y5h7yqpoxpyw7kqk \ --discovery-token-ca-cert-hash sha256:07d800f2a5d7114dc3c42361b09f3e71ba836d9b5366e10252b852e507b099f3
配置kubectl(第四步结尾输出步骤) mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
验证主节点是否安装完成
kubectl get nodes

⚠️ 注意⚠️ : 此处主节点已经安装好,后面安装子节点
⚠️ 注意⚠️ :引入子节点 重复上面的操作: 1、安装docker 2、安装kubernetes,但是不需要配置 3、执行kubernetes的master的下图命令

在master主机验证节点是否加入到了集群
kubectl get nodes
kubectl get nodes
网络配置
查看kubernetes组件运行状态,发现有两个没有启动,这时候需要进行网络配置: kubectl get pod -n kube-system -o wide

1、设置静态IP地址 #修改配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 #进行修改 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" IPADDR=192.168.50.130 NETMASK=255.255.255.0 GATEWAY=192.168.50.2 DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="203e582b-6661-4aeb-9177-8a0a043e8499" DEVICE="ens33" ONBOOT="yes" #重启网卡 systemctl restart network 2、设置DNS 修改NetworkManager.conf 配置文件 vi /etc/NetworkManager/NetworkManager.conf #在[main]中添加 dns=no 修改resolv.conf配置文件 vim /etc/resolv.conf #添加dns nameserver 8.8.8.8 重启 systemctl restart NetworkManager 网关查询命令: “route -n”或“ip route”或“netstat -rn”
至于容器之间为什么不能直接通信,参考docker第三节课内容
Calico安装:
1.安装网络插件 Calico #官方文档安装:https://docs.projectcalico.org/v3.20/getting-started/kubernetes/ #在Master操作即可
kubectl apply -f https://docs.projectcalico.org/v3.20/manifests/calico.yaml
#验证是否成功 kubectl get pods --all-namespaces 在k8s上安装calico时报错: no matches for kind “PodDisruptionBudget“ in version “policy/v1“ #查看 kubernetes和Calico对应版本
https://projectcalico.docs.tigera.io/archive/v3.20/getting-started/kubernetes/requirements 删除:Calico 1、删除配置文件 kubectl delete -f calico.yaml
2、检查所有节点上的网络,看看是否存在Tunl0 ip addr show
3、删除Tunl0 modprobe -r ipip
4、移除Calico配置文件 ls /etc/cni/net.d/
5、看看是否存在Calico相关的文件和目录,如:10-calico.conflist, calico-kubeconfig, calico-tls,如果有将其移除。
#注意:如果启动不成功,很简单,在master把节点删除,重新设置node的kubeadm然后重启,然后重新加入集群。
健康检查:
命令: kubectl get cs
出现以下问题:
以下解决方式:
1.修改kube-scheduler.yaml文件
vim /etc/kubernetes/manifests/kube-scheduler.yaml
2.修改kube-controller-manager.yaml文件
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
修改完成以后:
3.每台master重启kubelet
systemctl restart kubelet.service
4.再次查看状态
kubectl get cs



实例:运行Tomcat容器
1.健康检查 kubectl get cs #输出 NAME STATUS MESSAGE ERROR scheduler Healthy ok controller-manager Healthy ok etcd-0 Healthy {"health":"true"}
#scheduler调度服务,主要作用是将 POD 调度到 Node #controller-manage自动化修复服务,主要作用是 Node 宕机后自动修复 Node 回到正常的工作状态 #etcd-0服务注册与发现
master apiserver node runtime kubelet kube-proxy node1 node2
2.查看master状态 kubectl cluster-info
3.查看node状态 kubectl get nodes
4.运行tomcat容器 #使用kubectl命令创建两个监听8080端口的tomcat pod(Kubernetes运行容器的最小单元) kubectl create deployment tomcat --image=tomcat
#查看pod状态 kubectl get pods
#查看已部署的服务 kubectl get deployment
#映射服kubectl expose deploy tomcat --port=8080 --type=NodePort
#查看已经发布的服务 kubectl get services
#查看服务详情 kubectl describe service tomcat
5.访问
6.停止服务并删除 kubectl delete deployment tomcat kubectl delete service tomcat
删除节点 kubectl delete node "节点名字"
上图情况,将节点删除之后重新安装


浙公网安备 33010602011771号