环境准备
使用vbox虚拟机创建3台contos7机器。
- 三台机需要互通网络。
- 虚拟机网络设置nat(外网访问)和hostonly(内网ip)指定固定ip。
三台机分别表示
k8s-master:192.168.56.100
k8s-node1:192.168.56.101
k8s-node2:192.168.56.102
网络配置流程
-
创建网络
vbox->管理-> 主机网络管理器
-
虚拟机配置网络
网卡1
网卡2
进入到虚拟机
设置固定ip
sudo vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
将其设为开机启动即可
设置静态ip地址
sudo vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
内容如下
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.56.100 #替换为想要的ip
NETMASK=255.255.255.0
GATEWAY=10.0.2.2 # 网关有可能设置不对导致无法访问外网
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s8
UUID=72a9fc90-8361-4c31-abb9-5f0bc166b66f
DEVICE=enp0s8
ONBOOT=yes
服务器基础配置
更新yum依赖/安装必要依赖
sudo yum -y update
sudo yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp yum-utils device-mapper-persistent-data lvm2
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
关闭selinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
关闭swap
swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
iptables配置
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
系统参数设置
cat < /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
完成以上配置可以使用vbox的复制功能复制多两台虚拟机,总共三台。
host设置
三台机配置完成后,配置虚拟机host
master:
sudo hostnamectl set-hostname k8s-master
vi /etc/hosts
/etc/hosts内容
192.168.56.100 k8s-master
192.168.56.101 k8s-node1
192.168.56.102 k8s-node2
node1:
sudo hostnamectl set-hostname k8s-node1
vi /etc/hosts
/etc/hosts内容
192.168.56.100 k8s-master
192.168.56.101 k8s-node1
192.168.56.102 k8s-node2
node2:
sudo hostnamectl set-hostname k8s-node2
vi /etc/hosts
/etc/hosts内容
192.168.56.100 k8s-master
192.168.56.101 k8s-node1
192.168.56.102 k8s-node2
安装docker
三台机都要安装docker,也可以安装了docker后再用vbox的复制功能。
设置docker国内仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
镜像加速设置
从阿里云获取 阿里云加速地址
sudo mkdir -p /etc/docker
cat > /etc/docker/daemon.json <
native.cgroupdriver=cgroupfs
确保跟安装的k8s一致即可
安装docker
使用版本19.03.11 版本列表
yum install -y docker-ce-19.03.11 docker-ce-cli-19.03.11 containerd.io
启动docker
sudo systemctl start docker && sudo systemctl enable docker
安装k8s
配置国内阿里yum源
cat < /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
EOF
安装kubelet,kubectl,kubeadm。v1.17.0-0版本
yum install -y kubeadm-1.17.0-0 kubelet-1.17.0-0 kubectl-1.17.0-0
检查是否生效
sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
以上命令执行输出directory not exist,说明是没问题的
启动服务
systemctl enable kubelet && systemctl start kubelet
镜像拉取
查看kubeadm v1.17.0版本依赖
kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.17.8
k8s.gcr.io/kube-controller-manager:v1.17.8
k8s.gcr.io/kube-scheduler:v1.17.8
k8s.gcr.io/kube-proxy:v1.17.8
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5
创建拉取脚本
k8s镜像拉取脚本 k8sInit.sh
#!/bin/bash
set -e
KUBE_VERSION=v1.17.0
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.4.3-0
CORE_DNS_VERSION=1.6.5
GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers
images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${CORE_DNS_VERSION})
for imageName in ${images[@]} ; do
docker pull $ALIYUN_URL/$imageName
docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName
docker rmi $ALIYUN_URL/$imageName
done
执行脚本
sh k8sInit.sh
查看docker镜像,确认拉取完成
docker images
推动到私有仓库解决被墙
创建脚本 dockerPush.sh
#!/bin/bash
set -e
KUBE_VERSION=v1.17.0
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.4.3-0
CORE_DNS_VERSION=1.6.5
GCR_URL=k8s.gcr.io
ALIYUN_URL=私有仓库地址
images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${CORE_DNS_VERSION})
for imageName in ${images[@]} ; do
docker tag $GCR_URL/$imageName $ALIYUN_URL/$imageName
docker push $ALIYUN_URL/$imageName
docker rmi $ALIYUN_URL/$imageName
done
登录docker
docker login --username=你的用户名 私有仓库地址
执行脚本 sh dockerPush.sh
以上操作每台虚拟机都要执行
集群部署
master初始化
指定ip,镜像地址
kubeadm init --kubernetes-version=1.17.0 --apiserver-advertise-address=192.168.56.100 --pod-network-cidr=10.244.0.0/16 --image-repository=私有仓库地址
初始化成功后按提示执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
记录join token
在node节点执行
kubeadm join 192.168.56.100:6443 --token b4c25e.gki5l7tuua3t8yu5 \
--discovery-token-ca-cert-hash sha256:82a4902062a7e4c1a104764c77c496ebab1a9e32234d86f955951879a1be50c9
校验是否成功
kubectl cluster-info
查看pod情况
kubectl get pods -n kube-system
健康检查
curl -k https://localhost:6443/healthz
安装calico网络插件
kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml
kubectl get pods --all-namespaces -w
node节点join
master节点初始化后输出的join命令,分别在节点执行即可
kubeadm join 192.168.56.100:6443 --token b4c25e.gki5l7tuua3t8yu5 \
--discovery-token-ca-cert-hash sha256:82a4902062a7e4c1a104764c77c496ebab1a9e32234d86f955951879a1be50c9
如果出现错误提示
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
执行命令
echo 1 > /proc/sys/net/ipv4/ip_forward
master节点查看节点运行情况
kubectl get nodes
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 4h1m v1.17.0
k8s-node1 NotReady 14m v1.17.0
k8s-node2 NotReady 7s v1.17.0
至此集群搭建完成
常用操作
- 查看运行详情
kubectl describe [类型] [name]
个人公众号