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

  1. 探究 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 的版本

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐