K8s集群搭建 先搭建master,再搭建node 一.master节点搭建 1.本次教程,使用 docker 18.09.9 和 kubelet-1.16.4,要求 centos7.6 以上版本 cat /etc/centos-release
2.关闭 selinux 查看 selinux 是否关闭
先设置临时关闭
永久关闭
3.关闭 swap k8s 要求系统关闭,否则安装过程会报错 查看系统是否关闭了 swap
临时禁用:swapoff -a
永久禁用:sed -i.bak ‘/swap/s/^/#/’ /etc/fstab ##注释掉 swap 那一行 作用就是修改/etc/fstab 配置为如下:
4.配置 ip_forward 转发 ip_forward 配置文件当前内容为 0,表示禁止数据包转发,将其修改为 1 表 示允许 echo “1” > /proc/sys/net/ipv4/ip_forward
5.更新 yum 源 为了一次性配置好下载源,我们一次性修改好 centos7 软件源,docker 源, k8s 源 先清除掉系统自带配置 rm -rf *
下载 centos7 的源和 docker 源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
结果如下:
6.配置 k8s 源 cat < /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
7.刷新 yum 缓存 yum clean all && yum makecahce fast
8.安装 docker docker 使用版本 18.09.9(版本可以自己选不用按照来,可以安装较新的版本) yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io -y
k8s 运行要求 docker 的–cgroup-driver=systemd, 配置阿里镜像加速器
启动 docker 并设置开机启动 systemctl enable docker && systemctl start docker
9.安装 k8s 组件: yum install -y kubelet-1.16.4 kubeadm-1.16.4 kubectl-1.16.4
设置开机启动:systemctl enable kubelet && systemctl start kubelet 添加 kubectl 上下文到环境中 echo “source <(kubectl completion bash)” >> ~/.bash_profile source .bash_profile 在家目录中,配置生效
10.内核参数修改 k8s 网络一般使用 flannel,该网络需要设置内核参数 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 添加参数配置文件: vi /etc/sysctl.d/k8s.conf
执行:sysctl -p /etc/sysctl.d/k8s.conf
至此,环境准备工作完毕 内核参数修改失败常见问题 有些系统执行 sysctl -p /etc/sysctl.d/k8s.conf 会报异常,一般是因为 修改这个参数需要系统有 br_netfilter 模块 使用 lsmod |grep br_netfilter 命令,查看系统里是否有 br_netfilter 模块
新增 br_netfilter 模块:输入modprobe br_netfilter即可 modprobe br_netfilter
上述方式重启后无效。需要配置系统启动加载脚本使其永久生效: vi /etc/sysconfig/modules/br_netfilter.modules 再增加执行权限
注意:执行成功就可以执行报错问题。 注意!!!:以上所有节点都需要配置,执行。包括node节点
二.Master 节点配置 1.Master 节点配置 kubeadm init --image-repository registry.aliyuncs.com/google_containers –kubernetes-version v1.16.4 --pod-network-cidr=10.244.0.0/16 这一步,如果出现下面错误,则是前面的 2.1.6 节点内核没有配置
正常情况,如下:
出现这一步,恭喜你,已经成功一大半了! 接下来,我们按它的提示执行操作。 创建 /.kube文件 mkdir -p $HOME/.kube
2.添加 flannel 的网络 按照 master 的提示,我们接下来应该配置一个 pod network。 但是,因为国内网络不通的原因,此操作无法完成。 你只能选择liuqh我自己定制的下面这个文件来完成 ,因为文件下载需要配置,配置比较麻烦。 上传文件到你的系统后,使用下面命令 kubectl apply -f peter-flannel.yml
至此,大功告成,但是我们node节点还没有加入master进行管理 3.查看集群 查看 k8s 集群,这时只有master
4.work 节点初始化 work 节点的配置,相对 master 来说简单许多,只需要规划好节点的名称即可 设置机器名 设置一个机器名为 node1
配置对应的 ip
5.加入集群
回到 master 节点再次查看集群
端口占用解决: kubeadm reset
Kubernetes:—创建Pod失败提示failed to “StartContainer” for “POD” with ImagePullBackOff 执行如下命令即可 yum install rhsm -y
三. K8S 基础操作 kubectl 的命令用法 可以借助 kubectl -h 命令学习用法,下面介绍常用的一些命令使用: kubectl run,创建一个应用程序 kubectl run nginx-dep --image=nginx:1.7.9 --port=80 --replicas=2 可以先测试:–dry-run
正式创建:
查看服务信息: kubectl get pods -o wide #获取 pod 的信息,-o wide 表示更详细的显示信息 看到系统里启动了两个 pod 服务(运行 nginx),分别运行在节点 node2 和 node3 上 测试 nginx 服务,服务 ok
- 探究 pod 详情:
kubectl describe pod nginx-dep-5779c9d6c9-cwjth
进入容器查看: 格式:kubectl exec -it podName -c containerName -n namespace – shell comand kubectl exec -it nginx-dep-5779c9d6c9-cwjth -c nginx-dep /bin/bash
2.暴露服务到外网
将 pod 创建完成后,访问该 pod 内的服务只能在集群内部通过 pod 的的地 址去访问该服务;当该 pod 出现故障后,该 pod 的控制器会重新创建一个 包括该服务的 pod,此时访问该服务须要获取该服务所在的新的 pod 的地址 ip 去访问。 #删除当前的 pod:
如何保持 pod 的故障恢复,对调用者无影响呢? 可以创建一个 service,当新的 pod 的创建完成后, service 会通过 pod 的 label 连接到该服务,只需通过 service 即可访问该服务。
查看 svc 的 label 配置
上述方式,虽然能够通过 service 访问到 pod 服务。但在集群外部,是无法 访问到的,如在本地 windows 机器上,想要访问到 nginx 服务,网络是不通 的。我们可以修改 service 的类型的 NodePort。 kubectl edit svc nginx-svc
查看绑定端口
在外部可以通过 node 节点的地址及该端口访问 pod 内的服务。
4.服务的伸缩 Pod 创建完成后,当服务的访问量过大时,可以对 pod 的进行扩展让 pod 中的服务处理更多的请求;当访问量减小时, 可以缩减 pod 数量,以节约资源。 这些操作都可以在线完成,并不会影响现有的服务。 缩减服务雷同 5.服务的在线升级与回滚 在 kubernetes 服务中部署完服务后,对服务的升级可以在线完成,升级出问题后,也可以在线完成回滚。、
可以看到滚动更新的过程: kubectl get pod -w ##w 参数是 watch,持续执行,并观察改变
再次查看镜像版本
还可以再回滚回原来的版本: kubectl rollout undo deployment nginx-dep
查看版本,又回到 1.7.9 的版本
|