1. 部署环境
(1)安装要求
- 一台或者多台虚拟机,操作系统CentOS7.x-86_64或者更高版本;
- 硬件配置:2GB或者更多RAM,2个CPU或者更多CPU,硬盘30G+;
- 可以访问外网,以便拉取镜像,如果服务器不能上网,需提前下载镜
并导入到节点; - 禁用swap分区
(2)环境规划
角色 | IP |
---|---|
master | 192.168.0.1 |
node | 192.168.0.2 |
node | 192.168.0.3 |
2. Kubernetes部署
2.1、kubeadm部署
kubeadm是官方社区推出的一个用于快速部署kubernates集群工具,该工具通过两条命令即可完成一个kubernetes集群的部署:
(1)创建一个Master节点 kubeadm init
(2)将Node节点加入到当前集群中 $kubeadm join <Master节点的IP和端口>,详细步骤如下:
2.1.1、虚拟机系统配置
(1)关闭防火墙
systemctl stop firewalld #临时关闭防火墙
systemctl disable firewalld #永久关闭防火墙
#辅助命令: systemctl status firewalld 查看防火墙状态
(2)关闭selinux
setenforce 0 #临时关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config #永久关闭
#辅助命令: sestatus #查看SElinux状态
(3)关闭swap
swapoff -a #临时关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭
#辅助命令 sfdisk -l 显示分区信息
(4)设置主机名称和hosts配置
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
并在master节点添加hosts
cat >> /etc/hosts << EOF
192.168.0.1 k8s-master
192.168.0.2 k8s-node1
192.168.0.3 k8s-node2
EOF
(5)将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
EOF
sysctl --system #让配置生效
(6)时间同步
yum install ntpdate -y
ntpdate time.windows.com #校时服务器,可是其他服务器
#辅助命令:date 查看系统时间
2.1.2、在所有节点安装Docker/kubeadm/kubelet
Kubernetes模式CRI(容器运行时)为Docker,因此必须先安装Docker环境。
(1)在线安装docker,离线安装请参考《docker常用命令与部署方式》
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.09.9-3.el7
systemctl enable docker && systemctl start docker
#辅助命令:docker -v 查看docker版本
#配置镜像仓库地址
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors":["https://mirrors.aliyun.com"]
}
EOF
(2)添加k8s的yum软件源(此处选择阿里云)
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
(3)安装kubeadm,kubelet和kubectl
由于k8s版本更新频繁,这里指定版本号部署:
yum install -y kubelet-1.18.20 kubeadm-1.18.20 kubectl-1.18.20
systemctl enable kubelet
#辅助命令: kubelet version 查看安装版本
#辅助命令: kubeadm version 查看安装版本
#辅助命令: kubectl version 查看安装版本
(4)部署Kubernetes Master节点
在192.168.0.1(Master),由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址,执行命令:
#apiserver-advertise-address 对应本机ip地址
#cidr 和当前网段不冲突即可
kubeadm init \
--apiserver-advertise-address=192.168.0.1 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.20 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
拉取完后的镜像列表:
master部署成功输出如下:
注意
:执行成功后的kubeadm join命令,拷贝到Node节点执行;
使用kubectl命令工具,在master节点按顺序执行如下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes #查看k8s集群节点
查看k8s集群节点,显示如下:
(5)加入Kubernetes Node节点
在(Node)执行
向集群添加新节点,执行在kubeadm init成功输出的kubeadm join命令
kubeadm join 192.168.0.135:6443 --token uvuy75.duzcnpu8an98hwbh \
--discovery-token-ca-cert-hash sha256:e12720ed2c135cf547c479d4e5ea33a36c97c63e1326ec7140232227edf2e32a
默认token的有效期为24h,当token过期后,该token将不可用,这时就需要重新创建token,操作如下:
kubeadm token create --print-join-command #仅在集群token过期后生成,然后node再加入集群
执行命令成功输出如下:
再次查看k8s集群节点,因缺少网络组建,显示如下:
(6)部署CNI网络插件
为了要让 Kubernetes Cluster 能够正常工作,必须安装 Pod 网络,否则 Pod 之间无法通信。Kubernetes 支持多种网络方案,这里我们使用 flannel,在Master节点执行即可。
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
方法1: 默认镜像地址无法访问,通过sed命令修改为docker hub镜像仓库,注意仓库为国外仓库(目前被墙挡住),执行命令如下:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl get pods -n kube-system #检查 Pod 的状态,可能存在ImagePullError(镜像拉取失败)
方法2(建议
):
a. 通过https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 链接将kube-flannel.yml文件下载到本地,并拷贝到Linux环境目录/opt/k8s.
b. 从阿里云拉取flannel镜像,当前最新版本docker pull registry.cn-hangzhou.aliyuncs.com/k8sos/flannel:v0.13.1-rc2
c. 将kube-flannel.yml文件中的镜像名称(image: quay.io/coreos/flannel:vxx)全部替换为:registry.cn-hangzhou.aliyuncs.com/k8sos/flannel:v0.13.1-rc2
d. 重新应用kube-flannel.yaml,执行命令: kubectl apply -f /opt/k8s/kube-flannel.yml
c. 检查Pod状态,执行命令:kubectl get pods -n kube-system
部署成功后运行如下:
(7)测试Kubernetes集群
在Kubernetes集群中创建一个Pod,验证是否正常运行:
kubectl create deployment nginx --image=nginx #自动联网下载nginx镜像
kubectl expose deployment nginx --port=80 --type=NodePort #对外暴露80映射端口
kubectl get pod,svc
访问地址:http://NodeIP:Port(此处为32445),或者通过命令curl GET http://192.168.0.1:32445访问,输出nginx默认页面如下:
(8)其他常用命令
kubectl get nodes
kubectl get pods