概述
Kubernetes 部署教程
一 环境规划
192.168.24.10 master01
192.168.24.11 node01
192.168.24.12 node02
二 服务器初始化 (master,node1,node2上共同操作)
1)查看系统版本
cat /etc/redhat-release
2)主机解析
vi /etc/hosts
192.168.24.10 master1
192.168.24.11 node1
192.168.24.12 node2
3) 时间同步
#启动chronyd服务
systemctl start chronyd
#设置chronyd服务开机自启
systemctl enable chronyd
4)关闭iptables和firewalld
# 关闭firewalld
systemctl stop firewalld
systemctl disable firewalld
# 关闭iptables服务
systemctl stop iptables
systemctl disable iptables
5)关闭Selinux
# 查看selinux 状态
getenforce
#永久关闭selinux(建议)
vi /etc/selinux/config
SELINUX=disabled
6) 禁用Swap分区
说明:swap分区是指虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用。启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些愿意缺少不能关闭swap,就需要在集群按照过程中通过明确的参数进行配置说明。
# 编辑分区配置文件/etc/fstab, 注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务
# 注释掉swap
vi /etc/fstab
最后一行注释掉即可,一定要重启服务器。
#/dev/mapper/rhel-swap swap
7) 修改Linux的内核参数
说明:修改Linux的内核参数,添加网桥过滤和地址转发功能
vi /etc/sysctl.d/kubernetes.conf 文件,并添加如下内容:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
# 重新加载配置
sysctl -p
8)加载网桥过滤模块
modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
lsmod | grep br_netfilter
# 成功后的结果
[root@node2 ~]# lsmod | grep br_netfilter
br_netfilter 22256 0
bridge 146976 1 br_netfilter
9)配置IPVS功能
# 在kubernetes中service 有两种代理模型,一种是基于iptables,另外一种是基于ipvs的;
# 两者比较的话:ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块
9-1)安装ipset、ipvsadm和相关常用工具
yum install ipset ipvsadm vim telent net-tools git bind-utils -y
9-2) 添加需要加载的模块写入脚本文件
vim /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
9-3) 为脚本文件添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
9-4) 执行脚本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules
9-5) 查看对应的模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
9-6) 重启K8S集群
reboot
三 安装docker(master01,node01,node02上共同操作)
1)切换镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
主:如果不能正确拉取镜像,请手动修改系统版本信息。 例如:$releasever 改为 7 ; $basearch 改为 x86_64
示例:baseurl=https://download.docker.com/linux/centos/7/debug-x86_64/test
2) 查看当前镜像源中支持的docker版本
yum list docker-ce --showduplicates
3)安装特定版本的docker-ce
# 必须指定 --setopt=obsoletes=0 ,否则yum会自动安装更高的版本
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
4)添加配置文件,修改镜像加速
#docker在默认情况下使用的Cgroup Driver为cgroupfs,二kubernetes推荐使用systemd来代替cgroupfs
mkdir -p /etc/docker
vim /etc/docker/daemon.json
{
"exec-opts":["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
5) 启动docker 并查看版本
systemctl start docker
systemctl enable docker
docker version
知识扩展:docker 卸载
1)查看yum安装的docker文件包
yum list installed |grep docker
2)查看docker相关的rpm源文件
rpm -qa |grep docker
3) 删除所有安装的docker包
yum -y remove docker.x86_64
四 安装kubernetes 组件(master01,node01,node02上共同操作)
1)修改镜像源地址
#由于kubernetes的镜像为国外,速度比较慢,这里切换成国内的镜像源
vi /etc/yum.repos.d/kubernetes.repo
2)安装kubernetes 组件 kubeadm、kubelet和kubectl
yum -y install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0
3)配置kublet的cgroup
vim /etc/sysconfig/kubelet , 添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
4)设置kubelet 开机启动
systemctl enable kubelet
五 准备集群镜像(master,node1,node2上共同操作)
1) 查看Kubernetes镜像
#在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
kubeadm config images list
2)下载镜像
#此镜像在kubernetes的仓库中,由于网络原因无法下载,下面提供了一种替代方案
# 手动定义本地镜像信息
5-2-1 先执行下面的信息
images=(
kube-apiserver:v1.17.4
kube-controller-manager:v1.17.4
kube-scheduler:v1.17.4
kube-proxy:v1.17.4
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
5-2-2 再执行下面的信息,直至所有需要的镜像下载完成。
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
3) 集群初始化只需要在master上进行。
kubeadm init
--kubernetes-version=1.17.4
--pod-network-cidr=10.244.0.0/16
--service-cidr=10.96.0.0/12
--apiserver-advertise-address=192.168.24.10 (此地址为K8S集群内部通讯地址)
Your Kubernetes control-plane has initialized successfully!
表示安装成功。
To start using your cluster, you need to run the following as a regular user:
如果要使用集群,请运行下面的命令(kubectl 读取的一个配置文件)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
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/
Then you can join any number of worker nodes by running the following on each as root:
把Node节点接入到master 中,执行下面命令
kubeadm join 192.168.24.10:6443 --token dut28g.u14c3rpwwitlxtsv
--discovery-token-ca-cert-hash sha256:c630fd8997456a53fafcd1d884891c2fe89d949f4055031aff07aca9c6e84a81
知识扩展
当新增加的Node无法接入到master中.
解决办法,再master上重新生产新的token,命令如下:
[root@k8s-master 1.8+]# **kubeadm token create**
W0222 08:38:09.720217 10666 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0222 08:38:09.720277 10666 validation.go:28] Cannot validate kubelet config - no validator is available
sap6od.rvd6h5im0whg9a0m
[root@k8s-master 1.8+]# **openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'**
e4f3952e0f3c695de58b349f7551c70e269bcd13464514396c7c041ca5ed1414
4) 查看node信息
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 7m2s v1.17.4
node1 NotReady <none> 13s v1.17.4
node2 NotReady <none> 2s v1.17.4
此时的状态为notready 因为当前的网络组件没有安装。
5)安装网络组件(只需要在master节点完成,node节点不需要此步操作)
5-5-1 通过网络直接安装flannel.yml
#kubernetes支持多种网络插件,比如flannelcalicocanal等等,任选一种使用即可,本次选择flannel
# 下面的操作依旧只在master节点执行即可,插件使用的是DaemonSet的控制器,它会在每个节点上都运行。
#获取fannel配置文件
#如遇到kube-flannel.yml 文件无法下载,添加下面信息到Hosts 中
199.232.68.133 raw.githubusercontent.com
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
### wget https://raw.githubuserontenet.com/coreos/flanel/master/Documentation/kube-flannel.yml
#修改文件中quay.io 仓库为quay-mirror.qiniu.com
5-5-2 使用本地修改好的flannel.yml上传后,直接安装
kubectl apply -f kube-flannel.ymml
6) 再次查看集群节点状态
[root@master01 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master01 Ready master 3h11m v1.17.4
node01 Ready <none> 3h11m v1.17.4
node02 Ready <none> 3h9m v1.17.4
7) 监控K8S 集群日志
查看kuberctl.services日志
journalctl -f -u kubelet.service
六环境测试
1)部署nginx
kubectl create deployment nginx --image=nginx:1.14-alpine
2) 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
3) 查看服务状态
[root@master01 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-6867cdf567-grhnb 1/1 Running 1 117m
[root@master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h17m
nginx NodePort 10.101.178.45 <none> 80:31454/TCP 118m
4) 通过外部网络访问测试页面
注: 此时一定要通过所有的Node IP 访问新部署的NGINX,如果有不能访问的节点。请仔细看看前面的步骤。
vc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 3h17m
nginx NodePort 10.101.178.45 80:31454/TCP 118m
### 4) 通过外部网络访问测试页面
```powershell
注: 此时一定要通过所有的Node IP 访问新部署的NGINX,如果有不能访问的节点。请仔细看看前面的步骤。
最后
以上就是刻苦柚子为你收集整理的第二章 集群环境搭建Kubernetes 部署教程的全部内容,希望文章能够帮你解决第二章 集群环境搭建Kubernetes 部署教程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复