我是靠谱客的博主 刻苦柚子,最近开发中收集的这篇文章主要介绍第二章 集群环境搭建Kubernetes 部署教程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 部署教程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部