kubernetes环境配置

K8S概述

k8s全称kubernetes,是一个为容器服务而生的可移植容器的编排管理工具,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第一个正式版本。目前k8s已经主导了云业务流程,推动了微服务架构等热门技术的普及和落地。K8S在架构方面很好的解决了可用性、伸缩性。在部署运维层面、服务部署、服务监控、应用扩容和故障处理方面,K8S都提供了很好的解决方案。

K8S的架构:

image-20200406184656917

前期准备

准备的组件:三台CentOS7系统的服务器(一主二从),在每台服务器中分别安装docker(18.06.3),kubeadm(1.17.4),kubelet(1.17.4),kubectl(1.17.4)程序。

主机安装

安装过程中需要注意的选项设置:

  • 操作系统环境:CPU(2C) 内存(2G) 硬盘(50G)

    安装流程为在VMWare中新建虚拟机→自定义→稍后安装操作系统→客户机操作系统选择为Linux(CentOS 64位)→设置CPU与内存→设置磁盘大小位50G→虚拟机设置中使用CentOS7的ISO映像文件。

  • CentOS安装过程中,软件选择为基础设施服务器,分区为自动分区,网络配置如下:

    要注意的是,ip地址前三个字段需要与VMWare中NAT模式下的子网ip前面相同。最后一个字段随意。

环境初始化

采用MobaXTerm远程连接3台设备对其进行统一设置。在MobaXTerm中选中三个远程连接,使用多执行功能同时对其进行配置。

1)检查操作系统版本

cat /etc/redhat-release

2)主机名解析

为了方便后面集群节点间的直接调用,对其配置主机名解析。

vim /etc/host
# 主机名解析,编辑三台服务器的/etc/host文件,添加如下内容
192.168.160.100 master
192.168.160.101 node1
192.168.160.102 node2

Snipaste_2022-04-27_15-51-24-在三台主机上开启时间同步

配置成功后,可以互相ping通。

3)时间同步

kubernetes要求集群中的节点时间必须精确一致,这里使用chronyd服务从网络同步时间。

#启动chronyd服务
systemctl start chronyd
#设置chronyd服务开机自启
systemctl enable chronyd
#date命令验证
date

Snipaste_2022-04-27_20-57-57

4)禁用iptables和firewalld服务

kubernetes和docker运行过程中和会产生大量的iptables规则,为了不让系统规则混淆,需要关闭。而CentOS中iptables服务本身不存在,不需要额外关闭,主要关闭firewalld服务

systemctl stop firewalld
systemctl disable firewalld

5)禁用selinux

selinux是linux系统下的一个安全服务。如果不关闭,会在安装过程中遇到很多问题。

vim /etc/selinux/config
#修改config文件,将selinux值修改为disabled。注意,修改完毕后需要重启linux服务
SELINUX=disabled

6)禁用swap分区

swap分区指的是虚拟内存分区。启用swap设备会对系统性能产生负面影响,因此kubernetes要求每个节点都要禁用swap设备。

vim /etc/fstab
#注释掉swap分区一行,修改后需要重启linux服务

Snipaste_2022-04-27_15-57-43-禁用swap分区

7)修改linux内核参数

#修改linux内核参数添加网桥过滤和地址转发功能
vim /etc/sysctl.d/kubernetes.conf

Snipaste_2022-04-27_16-00-18

#重新加载配置
sysctl -p

#加载网桥过滤模块
modprobe br-netfilter

#查看是否加载成功
lsmod | grep br_netfilter

8)配置ipvs功能

在kubernetes中service有两种代理模型,其中ipvs性能要高一些。若想要使用该服务,需要手动载入ipvs模块。

注意,黑马程序员网课中提供的是ipvsadmin,但是无法顺利安装,需要改为ipvsadm

Snipaste_2022-04-27_16-02-47-安装ipvs

#安装ipvs和ipvsadm
yum install ipset ipvsadm -y

#添加需要加载的模块写入脚本文件
cat <<EOF> /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
EOF

#为脚本添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules

#执行脚本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules

#查看是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4

Snipaste_2022-04-27_16-03-44-安装ipvsadm

9)重启服务器

安装docker

#1 切换镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yun.repos.d/docker-ce.repo

#2 查看当前镜像源中支持的docker版本
yum list docker-ce --showduplicates

#3 安装特定版本的docker-ce
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y

#4 添加配置文件
mkdir /etc/docker
cat <EOF>> /etc/docker/daemon.json
{
  "exec-opts":["native.cgroupdeiver=systemd"],
  "registry-mirrors":["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF

#5 启动docker
systemctl restart docker

Snipaste_2022-04-27_16-27-18-下载镜像源

Snipaste_2022-04-27_16-35-03-docker安装

安装kubernetes组件

#先切换为国内的镜像源
vim /etc/yum.repos.d/kubernetes.repo

#添加如下配置
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

#安装kubeadm、kubelet、kubectl
yum install --setopt=obsoletes=0 kubeadm=1.17.4-0 kubelet=1.17.4-0 kubectl=1.17.4-0 -y

#配置kubelet的cgroup
vim /etc/sysconfig/kubelet
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

#设置kubelet开机自启
systemctl enable kubelet

准备集群镜像

#先看看需要提前准备好的镜像
kubeadm config images list

#下载镜像
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
)


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

集群初始化

对集群进行初始化,将node节点加入到集群中

  • 只在master节点上执行的操作

    kubeadm init \
    --kubernetes-version=v1.17.4  \
    --pod-network-cidr=10.244.0.0/16  \
    --service-cidr=10.96.0.0/12  \
    --apiserver-advertise-address=192.168.160.100
    
    #会返回需要创建必要文件和密钥的命令行,在master节点上复制粘贴创建必要文件的命令行段。
    

    Snipaste_2022-04-27_17-17-33

  • 以下操作在node上完成

    kubeadm join 192.168.160.100:6443 --token a4eiui.psghhb5jwxlb5qpd \
        --discovery-token-ca-cert-hash sha256:0d2bd5cfce95a28db682ca6ba5d85fd8dd1de09aa579a8532c1bb88098b75abb
    

节点加入显示:

Snipaste_2022-04-27_17-21-21-添加节点

如果添加节点成功,那么在查询加入情况时,三个节点会全部显示ready:

Snipaste_2022-04-27_20-32-14-全部ready

网络插件安装

kubernetes支持多种网络插件,如flannel、calico、canal等。这里使用flannel。以下操作均在master节点。

wget https://raw.githubusercontect.com/coreos/flannel/master/Documentation/kube-flannel.yml

#使用配置文件启动flannel
kubectl apply -f kube-flannel.yml

至此,kubernetes的集群环境搭建完成

部署服务

#部署nginx
kubectl create deployment nginx --image=nginx:1.14-alpine

#暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort

#查看服务状态
kubectl get pods,svc

Snipaste_2022-04-27_20-36-21-服务部署

service/nginx中的端口号可以通过IP+端口号在浏览器中访问。若访问成功,则配置成功

Snipaste_2022-04-27_20-38-40-部署成功

遇到的问题

在配置过程中,由于node1节点配置失误,需要删除节点重新配置,走了很多弯路。先总结如下:

首先在master节点中采用如下代码移除node1节点:

kubectl delete node  node1

然后再node1节点下采用如下代码脱离:

分别是删除/etc/kubernets/下的目录、kubelet重启、节点初始化。

[root@node1 ~]# rm -rf /etc/kubernetes/*
[root@node1 ~]# systemctl restart kubelet
[root@node1 ~]# kubeadm reset -f

重新加入则和之前操作一致。
配置过程中,由于node1节点配置失误,需要删除节点重新配置,走了很多弯路。先总结如下:

首先在master节点中采用如下代码移除node1节点:

kubectl delete node  node1

然后再node1节点下采用如下代码脱离:

分别是删除/etc/kubernets/下的目录、kubelet重启、节点初始化。

[root@node1 ~]# rm -rf /etc/kubernetes/*
[root@node1 ~]# systemctl restart kubelet
[root@node1 ~]# kubeadm reset -f

重新加入则和之前操作一致。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生产环境搭建Kubernetes可以分为以下几个步骤: 1. 确保安装了必要的软件和工具:在搭建Kubernetes之前,确保已经安装了Docker、Conntrack、Socat和GlusterFS客户端等必要的软件和工具。可以通过命令安装这些软件,例如:`yum install docker conntrack socat glusterfs-client`。 2. 准备配置文件:根据实际情况,编辑或生成一个配置文件(例如config-sample.yaml),其中包含主机的相关信息,如主机名、IP地址、用户名和密码等。可以使用命令`./kk create config --from-cluster`生成一个示例配置文件,并根据需要进行修改。 3. 验证集群状态:使用`kubectl get node`命令验证集群中各个节点的状态,确保集群正常运行。 4. 添加新节点:如果需要添加新的节点到集群中,可以在配置文件中添加新节点的信息,包括主机名、IP地址、用户名和密码等。示例配置文件中的`hosts`和`roleGroups`字段可以用来添加新节点的信息。然后使用命令`./kk add nodes -f config-sample.yaml`将新节点添加到集群中。 5. 删除节点:如果需要删除节点,可以使用命令`kubectl cordon nodename`将要删除的节点设置为不可调度状态。然后使用命令`./kk delete node <nodeName> -f config-sample.yaml`删除节点。 6. 下载镜像和二进制文件:如果在没有网络的机器上进行搭建,可以从能够访问互联网的机器上下载镜像和二进制文件。使用命令`curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/images-list.txt`下载镜像清单文件。使用命令`curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/offline-installation-tool.sh`下载离线安装工具脚本。然后使用命令`chmod +x offline-installation-tool.sh`使脚本文件可执行。最后使用命令`./offline-installation-tool.sh -b -v v1.21.5`下载Kubernetes二进制文件。 请注意,以上步骤仅为示例,实际搭建过程可能会因环境和需求的不同而有所差异。在进行生产环境搭建时,请确保根据具体情况进行相应的配置和操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [kubesphere+kubernetes搭建生产环境高可用集群(三-2)](https://blog.csdn.net/weixin_45692576/article/details/125533589)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值