Kubernetes是支持集群环境内容编排的工具 简称k8s。k8s是谷歌官方提供的,底层基于docker,与docker-swarm是竞争关系。集群容器管理领域几乎都是采用的k8s。Kubernetes(k8s)主要作用是自动化容器的部署和复制,随时扩展或收缩容器规模,容器分组Group,并且提供容器间的负载均衡,实时监控,即时故障发现,自动替换。本文主要介绍Kubernetes(k8s) 简介及安装与配置方法。

示例服务器

Master:m-41 192.168.31.41
Work:w-42 192.168.31.42
Work:w-43 192.168.31.43

1、Kubernetes(k8s) 简介

httpswwwcjavapycom

  • Master 主节点
  • Node 节点
  • Service 服务
  • Replication Controller 复制控制器
  • Label 标签
  • Container 容器
  • Pod k8s最小控制单元

1)Master

​ Master是集群的网关和中枢枢纽,主要作用:暴露API接口,跟踪其他服务器的健康状态、以最优方式调度负载,以及编排其他组件之间的通信。单个的Master节点可以完成所有的功能,但是考虑单点故障的痛点,生产环境中通常要部署多个Master节点,组成Cluster.

2)Node

​ Node是k8s的工作节点,负责接收来自Master的工作指令,并根据指令相应地创建和销毁Pod对象,以及调整网络规则进行合理路由和流量转发。生产环境中,Node节点可以有N个。

3)Pod

pod是容器的容器,可以包含多个Container

是k8s最小的可部署的单元,一个Pod就是一个进程

pod内部容器的网络互通,每个pod都有独立的虚拟ip

pod都是部署完整的应用或者模块

2、配置阿里源

将Debian/Ubuntu 或 CentOS/RHEL/Fedora Linux配置成阿里源。

1)Debian/Ubuntu

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" >>/etc/apt/sources.list.d/kubernetes.list

2)CentOS/RHEL/Fedora

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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

下载地址https://mirrors.aliyun.com/kubernetes/

3、配置LInux防火墙和关闭selinux

1)可以关闭Linux的防火墙或配置开放下面的安全端口:

参考文档:

CentOS7中禁用firewall,安装iptables

Linux VPS中防火墙iptables配置脚本

关闭防火墙:

service iptables start 开启防火墙
service iptables stop 关闭防火墙
service iptables status 查看防火墙状态
chkconfig iptables on 防火墙开机自启
chkconfig iptables off 禁止开机自启
chkconfig iptables status 查看是否为开机自启
systemctl start firewalld 开启防火墙
systemctl stop firewalld 关闭防火墙
systemctl status firewalld 查看防火墙状态
systemctl enable firewalld 防火墙开机自启
systemctl disable firewalld 禁止开机自启
systemctl is-enabled firewalld 查看是否为开机自启

Kubernetes-v1.17.3的组件端口如下:

组件

端口

参数

默认值

协议

必须开启

说明

kube-apiserver

安全端口

--secure-port

6443

HTTPS

-

kube-apiserver

非安全端口

--insecure-port

8080

HTTP

否,0表示关闭

deprecated

kubelet

健康检测端口

--healthz-port

10248

HTTP

否,0表示关闭

-

kube-proxy

指标端口

--metrics-port

10249

HTTP

否,0表示关闭

-

kubelet

安全端口

--port

10250

HTTPS

认证与授权

kube-scheduler

非安全端口

--insecure-port

10251

HTTP

否,0表示关闭

deprecated

kube-controller-manager

非安全端口

--insecure-port

10252

HTTP

否,0表示关闭

deprecated

kubelet

非安全端口

--read-only-port

10255

HTTP

否,0表示关闭

-

kube-proxy

健康检测端口

--healthz-port

10256

HTTP

否,0表示关闭

-

kube-controller-manager

安全端口

--secure-port

10257

HTTPS

否,0表示关闭

认证与授权

kube-scheduler

安全端口

--secure-port

10259

HTTPS

否,0表示关闭

认证与授权

注意:除了四个安全端口以外,其他端口都建议关闭。另外,kube-apiserverkube-controller-managerkube-scheduler的非安全端口这个参数在未来的版本中会被废弃掉。

2)关闭selinux

selinux需要将修改/etc/selinux/config,将SELINUX设置为disable

vi /etc/selinux/config

改成如下:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

3)关闭每台服务器的SWAP

swapoff -a ; sed -i '/swap/d' /etc/fstab

4)配置hosts文件

使用三台服务器可以在局域网通过域名访问。在m-41上,修改hosts文件命令如下:

vim /etc/hosts

添加如下内容:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.31.41 m41.cjavapy.com m-41
192.168.31.42 w42.cjavapy.com w-42
192.168.31.43 w43.cjavapy.com w-43

将修改后的hosts文件传到w-42和w-43的/etc/目录下,可以使用scp命令:

scp /etc/hosts w-42:/etc/
scp /etc/hosts w-43:/etc/

4、安装Docker

1)三台服务器上安装docker-ce版本

相关文档CentOS7下安装docker

2)配置阿里云镜像加速器

相关文档Linux Docker 配置阿里云镜像加速的方法

5、安装Kubernetes(k8s)

1)每台服务器上配置iptables设置

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

2)每台机器上安装Kubernetes(k8s)

yum install -y kubelet-1.21.0-0 kubeadm-1.21.0-0 kubectl-1.21.0-0 --disableexcludes=kubernetes

3)启动Kubernetes(k8s)

systemctl restart kubelet 

4)配置Kubernetes(k8s)开机启动

systemctl enable kubelet

注意:Kubernetes(k8s)的版本命名,例如,版本号为x.y.z-0,其中x为大版本号,y为小版本号,z为补丁号。版本前面一般会加一个v,表示version

查看yum中可安装Kubernetes(k8s)版本的命令如下:

yum list --showduplicates kubeadm --disableexcludes=kubernetes

6、初始化和配置master集群

1)master的核心组件,例如,api-server、scheduler、kubelet、etcd、scheduler等都是以容器的方式运行,由于默认的国外镜像站点可能无法访问,需要修改为阿里云镜像下载,同时需要指定版本和pod的网段地址:

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.21.0 --pod-network-cidr=10.244.0.0/16

注意--image-repository参数,默认值是k8s.gcr.io,我们将其指定为国内镜像地址:registry.aliyuncs.com/google_containers,还需要指定--kubernetes-version参数,因为它的默认值是stable-1,会导致从https://dl.k8s.io/release/stable-1.txt下载最新的版本号,我们可以将其指定为固定版本。

2)创建master的Kubernetes(k8s)认证文件

上面初始化完成后会有提示信息,依次复制提信息中的三条命令即可:

 mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

7、worker nodes加入集群

master中执行命令如下:

kubeadm token create --print-join-command

将输出的命令内容复制到两台work nodes上执行即可,master中查看nodes命令如下:

[root@m-41 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
m41.cjavapy.com NotReady control-plane,master x v1.21.0
w42.cjavapy.com NotReady <none> x v1.21.0
w43.cjavapy.com NotReady <none> x v1.21.0

w-42和w-43都加入到了集群中;但是STATUS是NotReady,原因是各个Pod之间无法通信,需要安装CNI网络插件。安装calico命令如下:

curl https://docs.projectcalico.org/manifests/calico-etcd.yaml -o calico.yaml

查看calico.yaml中需要的镜像:

[root@m-41 ~]# grep image calico.yaml
image: docker.io/calico/cni:v3.19.1
image: docker.io/calico/cni:v3.19.1
image: docker.io/calico/pod2daemon-flexvol:v3.19.1
image: docker.io/calico/node:v3.19.1
image: docker.io/calico/kube-controllers:v3.19.1

docker pull 拉取下来所需要镜像,并保存打包成tar文件传到两个work nodes上,在每台机器上导入回镜像:

docker save calico/cni calico/kube-controllers calico/node calico/pod2daemon-flexvol > calico-3.19-img.tar
scp calico-3.19-img.tar w-42:~
scp calico-3.19-img.tar w-43:~
docker load -i calico-3.19-img.tar

可以使用docker images查看每台机器上镜像是否加载成功,然后修改calico.yaml文件:

vim calico.yaml

calico.yaml文件中192.168.0.0,修改为初始化集群时pod的10.244.0.0/24的配置,内容如下:

- name: CALICO_IPV4POOL_CIDR
 value: "10.244.0.0/16"

修改保存后,在master上安装calico,命令如下:

kubectl apply -f calico.yaml

安装完成后查看noeds状态,命令如下:

[root@m-41 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
m41.cjavapy.com Ready control-plane,master 1d3h v1.21.0
w42.cjavapy.com Ready <none> 1d3h v1.21.0
w43.cjavapy.com Ready <none> 1d3h v1.21.0

注意:上面可以看到STATUS为Ready。

推荐文档

相关文档

大家感兴趣的内容

随机列表