k8s搭建详细版
K8s集群搭建先搭建master,再搭建node一.master节点搭建1.本次教程,使用 docker 18.09.9 和 kubelet-1.16.4,要求 centos7.6 以上版本cat /etc/centos-release2.关闭 selinux查看 selinux 是否关闭先设置临时关闭永久关闭3.关闭 swapk8s 要求系统关闭,否则安装过程会报错查看系统是否关闭了 swap临
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 的版本
更多推荐
所有评论(0)