运行如下脚本
#最小化安装没有yum-utils
yum -y install yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
#安装docker
yum -y install docker-ce
#设置docker镜像加速
echo '{"registry-mirrors": ["http://hub-mirror.c.163.com"]}'>/etc/docker/daemon.json
#重启生效
systemctl start docker & systemctl enable docker
#禁用swap,否则kubelet无法正常使用
sed -i '/ swap / s/^/#/' /etc/fstab
swapoff -a
#关闭防火墙,各种端口访问简化设置
systemctl stop firewalld & systemctl disable firewalld
#配置K8S软件源
cat <<EOF > /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
exclude=kube*
EOF
#目前kubelet还不支持selinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
#安装kubelet kubeadmin kubectl
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable --now kubelet
#官方说是有些用户反映CentOS的BUG
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
#get latest packages
yum update
下载镜像
使用如下命令检查所需镜像。
kubeadm config images list
修改如下脚本的KUBE_VERSION为上面命令里面获取的版本号,保存并运行。
cat>pull_images.sh<<'EOF'
#!/bin/bash
KUBE_VERSION=v1.17.3
FLANNEL_VERSION=v0.11.0
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.4.3-0
DNS_VERSION=1.6.5
prefix=registry.cn-chengdu.aliyuncs.com/gcrs
images=(
kube-proxy-amd64:${KUBE_VERSION}
kube-scheduler-amd64:${KUBE_VERSION}
kube-controller-manager-amd64:${KUBE_VERSION}
kube-apiserver-amd64:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd-amd64:${ETCD_VERSION}
coredns:${DNS_VERSION}
)
for image in ${images[@]}
do
NEW_IMAGE=`echo ${image}|awk '{gsub(/-amd64/,"",$0);print}'`
echo ${NEW_IMAGE}
docker pull ${prefix}/${image}
docker tag ${prefix}/${image} k8s.gcr.io/${NEW_IMAGE}
docker rmi ${prefix}/${image}
done
#prefix仓库里面没有flannel,单独拉取
docker pull quay-mirror.qiniu.com/coreos/flannel:${FLANNEL_VERSION}-amd64
docker tag quay-mirror.qiniu.com/coreos/flannel:${FLANNEL_VERSION}-amd64 quay.io/coreos/flannel:${FLANNEL_VERSION}-amd64
EOF
bash pull_images.sh
#不执行如下命令运行kubectl时会报错:The connection to the server localhost:8080 was refused
export KUBECONFIG=/etc/kubernetes/admin.conf
#简化kubectl命令输入
cat >> ~/.bashrc <<EOF
alias k='kubectl'
alias kk='kubectl -n kube-system'
export KUBECONFIG=/etc/kubernetes/admin.conf
EOF
source ~/.bashrc
至此模板结点已经配置完成!
生成node1
关机,在node0上右键选择复制,输入node1,勾选初使化所有网卡的MAC地址,点击继续,选择完全复制,点击继续,选择当前电脑虚拟状态,点击复制。参照node0配置好端口转发。
集群安装
在node0上执行如下初使化集群。
#设置主机名为node0
hostnamectl set-hostname node0
kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.17.0 --apiserver-advertise-address=192.168.0.4
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
单结点使用如下命令去除污点,使得master也成为工作结点
kubectl taint nodes --all node-role.kubernetes.io/master-
记录下如上命令最后的输出,用于其它结点加入集群。
kubeadm join 192.168.0.2:6443 --token r19zrj.kvphznlyisn021sf \
--discovery-token-ca-cert-hash sha256:86deab015a0713811e3e05b1cbecd55f85b79c43c3f16460a2f4627cfae0cdef
启动node1,在node0上执行如下命令将配置文件分发到node1,方便使用。
scp /etc/kubernetes/admin.conf root@192.168.0.3:/etc/kubernetes/admin.conf
node1上运行如下命令设置主机名
hostnamectl set-hostname node1
运行如上的kubeadm join加入集群,至此,2节点集群创建完成!