k8s安装参考

主机规划

主机名

IP地址

操作系统

配置

Master

192.168.0.230

Centos 7.6

2核2g

Note1

192.168.0.231

Centos 7.6

1核1g

Note2

192.168.0.232

Centos 7.6

1核1g

参考链接:https://www.cnblogs.com/QIzhu/p/16627539.html

集群环境准备

以下环境配置需在三台主机都要执行:

1.关闭防火墙并设置防火墙随机不自启

kubernetes和docker在运行中会产生大量防火墙规则)

systemctl stop firewalld  && systemctl disable firewalld

2.关闭SELinux系统内核安全机制

#临时关闭  setenforce 0

#永久关闭 vi /etc/selinux/config     SELINUX=disabled

3.配置本地yum源

4.配置本地主机名与IP地址解析

为了后面对集群节点的调用,企业中推荐使用内部DNS服务器)

[root@master ~]# vim /etc/hosts

192.168.0.230 master

192.168.0.231 node1

192.168.0.232 node2

5.配置时间同步,保证每一个节点时间一致

#安装时间同步服务

yum -y install chrony

#启动chronyd

systemctl start chronyd && systemctl enable chronyd

#查看时间

[root@master ~]# date

6.禁用swap交换分区

kubernetes强制要求禁用

#修改/etc/fstab文件,注释掉swap自动挂载一行即可,修改后需要重启系统生效,这一步可放在最后环境

配置后一起重启

vim /etc/fstab

...

#/dev/mapper/centos-swap swap swap defaults 0 0

7.修改Linux内核参数,添加网桥过滤器和地址转发功能

#编辑/etc/sysctl.d/kubernetes.conf文件添加如下配置(该文件默认不存在)

vim /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

#加载网桥过滤器模块

modprobe br_netfilter

#查看网桥过滤器模块是否加载成功

lsmod | grep br_netfilter

br_netfilter 22256 0bridge 151336 1 br_netfilter

8.配置ipvs功能

kubernetes中Service有两种代理模型,一种是基于iptables的,一种是基于ipvs,

两者对比ipvs的性能要高,如果想要使用ipvs模型,需要手动载入ipvs模块

#安装ipset和ipvsadm软件

yum -y install ipset ipvsadm

#添加需要加载的模块写入脚本文件

cat > /etc/sysconfig/modules/ipvs.modules <<EOF

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

#执行脚本

/etc/sysconfig/modules/ipvs.modules

#查看对应的模块是否加载成功

lsmod | grep -e ip_vs -e nf_conntrack_ipv4

nf_conntrack_ipv4 15053 0

nf_defrag_ipv4 12729 1 nf_conntrack_ipv4

ip_vs_sh 12688 0

ip_vs_wrr 12697 0

ip_vs_rr 12600 0

ip_vs 145497 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr

nf_conntrack 133095 2 ip_vs,nf_conntrack_ipv4

libcrc32c 12644 3 xfs,ip_vs,nf_conntrack

#重新启动系统

reboot

#检查SELinux是否关闭

getenforce   //显示Disabled

#检查swap分区是否关闭

free -h

9.安装docker、kubeadm、kubelet、kubectl程序  

//三台主机都需要安装

#创建阿里Base源与epel源用于安装依赖包

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

#生成yum缓存提高软件下载速度[root@master ~]# yum makecache

#安装yum-utils软件用于提供yum-config-manager程序

yum install -y yum-utils

#使用yum-config-manager创建docker存储库(阿里)

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#查看当前镜像源中支持的docker版本

yum list docker-ce --showduplicates

docker-ce-18.06.3.ce-3.el7 #该版本为特定版

#安装特定版docker-ce,安装时需要使用--setopt=obsoletes=0参数指定版本,否则yum会自动安装高版本

yum -y install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7

#查看docker版本信息

docker --version

#创建/etc/docker目录,并在/etc/docker目录下添加一个配置文件

mkdir /etc/docker

#Docker默认使用的Cgroup Driver为默认文件驱动,而k8s默认使用的文件驱动为systemd,k8s要求驱动类型必须要一致,所以需要将docker文件驱动改成systemd

cat <<EOF > /etc/docker/daemon.json

{

"registry-mirrors": ["https://aoewjvel.mirror.aliyuncs.com"],

"exec-opts": ["native.cgroupdriver=systemd"]

}

EOF

#启动docker程序

systemctl start docker && systemctl enable docker

10.安装kubernetes程序

#创建阿里kubernetes仓库

cat <<EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

gpgcheck=0

EOF

#查看仓库可用软件包

yum repolist

#生成yum缓存提高软件下载速度

yum makecache

#安装kubeadm、kubelet、kubectl程序

yum -y install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0

#配置kubelet的cgroup,编辑/etc/sysconfig/kubelet文件

vim /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

KUBELET_PROXY_MODE="ipvs"

#设置kubelet随机自启

systemctl enable kubelet

11.下载集群镜像

#在安装kubernetes集群前,必须要准备好集群需要的镜像,所需的镜像可以通过下面命令查看

#kubeadm config images list

k8s.gcr.io/kube-apiserver:v1.17.4

k8s.gcr.io/kube-controller-manager:v1.17.4

k8s.gcr.io/kube-scheduler:v1.17.4

k8s.gcr.io/kube-proxy:v1.17.4

k8s.gcr.io/pause:3.1

k8s.gcr.io/etcd:3.4.3-0

k8s.gcr.io/coredns:1.6.5

#定义镜像列表,应为此镜像在kubernetes仓库中,由于网络原因无法下载,下面提供了一种替代方案

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

#查看镜像(标签以变成k8s标签)

#docker images

REPOSITORY

k8s.gcr.io/kube-proxy

k8s.gcr.io/kube-scheduler

k8s.gcr.io/kube-apiserver

k8s.gcr.io/kube-controller-manager

k8s.gcr.io/coredns

k8s.gcr.io/etcd

k8s.gcr.io/pause

集群初始化

Master节点创建集群(该操作只在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.0.230  (控制节点IP)

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

node节点加入集群

kubeadm join 192.168.0.230:6443 --token k0iymj.1vmpqlws0bfk8iaw \

    --discovery-token-ca-cert-hash sha256:376d1e7633a2f7b9a9c6ccdaba165c3079966aca9ada6b63affaef500dd87958

kubeadm join 192.168.0.230:6443 --token k0iymj.1vmpqlws0bfk8iaw \

--discovery-token-ca-cert-hash sha256:376d1e7633a2f7b9a9c6ccdaba165c3079966aca9ada6b63affaef500dd87958

master节点查看node节点信息

kubectl get nodes

安装网络插件

kubernetes支持多种网络插件,如:flflannel、calico、canal等,任选一种使用即可,本次部署选择 flflannel 只在master节点安装flflannel插件即可,该插件使用的是DaemonSet控制器,该控制器会在每个节点上都运行

#获取flannel配置文件

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

#执行文件启动flannel

kubectl apply -f kube-flannel.yml

#查看nodes节点信息

kubectl get nodes

集群环境测试

在kubenetes集群中部署一个nginx程序测试集群是否能正常工作

#部署nginx程序

[root@master ~]# kubectl create deployment nginx --image=nginx:1.18-alpine

#开放端口

[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort

#查看pod状态

[root@master ~]# kubectl get pod

#查看service状态

[root@master ~]# kubectl get service

#访问测试

http://192.168.0.230:31813/

 

posted on 2023-09-22 21:40  枫飘过的天1  阅读(34)  评论(0编辑  收藏  举报