示例服务器:
Master:m-41 192.168.31.41 Work:w-42 192.168.31.42 Work:w-43 192.168.31.43
1、Kubernetes(k8s) 简介
- 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的防火墙或配置开放下面的安全端口:
参考文档:
关闭防火墙:
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-apiserver
、kube-controller-manager
、kube-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。