kubernetes环境配置

K8S概述

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

K8S的架构:

kubernetes环境配置_第1张图片

前期准备

准备的组件:三台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安装过程中,软件选择为基础设施服务器,分区为自动分区,网络配置如下:

    kubernetes环境配置_第2张图片

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

    kubernetes环境配置_第3张图片

环境初始化

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

1)检查操作系统版本

cat /etc/redhat-release

kubernetes环境配置_第4张图片

2)主机名解析

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

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

kubernetes环境配置_第5张图片

配置成功后,可以互相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

kubernetes环境配置_第6张图片

6)禁用swap分区

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

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

kubernetes环境配置_第7张图片

7)修改linux内核参数

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

kubernetes环境配置_第8张图片

#重新加载配置
sysctl -p

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

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

8)配置ipvs功能

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

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

kubernetes环境配置_第9张图片

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

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

kubernetes环境配置_第10张图片

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 > /etc/docker/daemon.json
{
  "exec-opts":["native.cgroupdeiver=systemd"],
  "registry-mirrors":["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF

#5 启动docker
systemctl restart docker

kubernetes环境配置_第11张图片

kubernetes环境配置_第12张图片

安装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

kubernetes环境配置_第13张图片

集群初始化

对集群进行初始化,将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节点上复制粘贴创建必要文件的命令行段。
    

    kubernetes环境配置_第14张图片

  • 以下操作在node上完成

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

节点加入显示:

kubernetes环境配置_第15张图片

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

kubernetes环境配置_第16张图片

网络插件安装

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

kubernetes环境配置_第17张图片

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

kubernetes环境配置_第18张图片

遇到的问题

在配置过程中,由于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

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

你可能感兴趣的:(云计算,kubernetes)