配置要求
- 3台 2核4G 的ECS
- CentOS 7.6
安装后的软件版本为:
- Kubernetes 1.17.0
- Docker 19.03.5
准备ECS
先准备三台ECS,然后分别修改主机名, 配置hosts。以下操作,在三台机器上都要进行。
使用 hostnamectl 命令设置主机名, 将机器一主机名改为master,将机器二、机器三改名为worker1、worker2
sudo hostnamectl set-hostname master
sudo hostnamectl set-hostname worker1
sudo hostnamectl set-hostname worker2
配置hosts,用文本编辑器中打开 /etc/hosts 文件,然后加上以下配置
192.168.0.154 master 192.168.0.155 worker1 192.168.0.156 worker2
192.168.0.154、192.168.0.155、192.168.0.156分别是三台机器的内网IP
重启实例以接受新主机名
sudo reboot
登录实例,验证主机名是否已更新
hostname
检查下防火墙是否关闭,如果开启了,请关闭
firewall-cmd --state
检查下swap是否关闭,如果开启了,请关闭
free -g
检查下selinux是否禁用,如果开启了,请关闭
getenforce
安装Docker
先卸载旧版本的Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
执行以下命令安装依赖包:
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。 执行下面的命令添加 yum 软件源:
$ sudo yum-config-manager \
--add-repo \
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 官方源
# $ sudo yum-config-manager \
# --add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo
更新 yum 软件源缓存,并安装 docker-ce。
sudo yum makecache fast
sudo yum install docker-ce
启动 Docker 服务
sudo systemctl enable docker
sudo systemctl start docker
创建daemon.json
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
您可以通过修改daemon配置文件来使用加速器, 例如使用阿里云的镜像加速器
重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
修改 /etc/sysctl.conf
在/etc/sysctl.conf
中增加以下内容
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
然后,再执行命令以应用
sudo sysctl -p
安装kubelet、kubeadm、kubectl
配置K8S的yum源
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
EOF
安装kubelet kubeadm kubectl
sudo yum install -y kubelet kubeadm kubectl
启动 kubelet
sudo systemctl enable kubelet
sudo systemctl start kubelet
初始化 master 节点
在 master 所在的机器通过kubeadm init命令来初始化 master, 参数说明
表头 | 表头 |
---|---|
apiserver-advertise-address | API服务器将通知它正在监听的IP地址,监听的地址为“0.0.0.0”表示本机所有IP地址。 |
pod-network-cidr | 指定pod网络的IP地址范围。如果设置,控制平面将为每个节点自动分配CIDRs |
service-cidr | 为service 使用不同的IP地址。(默认 10.96.0.0/12) |
然后我们指定选项进行初始化:
运行以下命令来初始化 master 节点
sudo kubeadm init \
--kubernetes-version=v1.17.0 \
--apiserver-advertise-address=192.168.0.154 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--image-repository="registry.cn-hangzhou.aliyuncs.com/google_containers"
如果遇到以下报错
nfortunately, an error has occurred:
timed out waiting for the condition
This error is likely caused by:
- The kubelet is not running
- The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)
检查下apiserver-advertise-address的ip是不是设的master的ip
master 节点初始化后,注意命令行最后的输出,后面会用到
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.0.154:6443 --token xf6jwp.qwabzranq2q8ptwb \
--discovery-token-ca-cert-hash sha256:a62cf69bd5a6ea6ac90e8eff936e5770eaa3bfaf44ec2bdd76f1a5c391ab280b
执行kubeadm init后输出的命令
集群主节点启动之后,我们需要使用kubectl来管理集群,在开始前,我们需要设置其配置文件进行认证。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装flannel网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
检查集群状态
安装完成之后,我们可以使用以下命令来检查集群组件是否运行正常:
kubectl get cs
将节点加入集群
找到使用"kubeadm init"启动主节点时打印出来的"kubeadm join"脚本, 然后分别在机器二、机器三上运行
kubeadm join 10.0.0.78:6443 --token zv6zpw.oyx2u2rhnrq6xvqk \
--discovery-token-ca-cert-hash sha256:c8f59b16ea300f10450e9a6adc152509b20a1b0f3ece9cc3d86ab1530afe2ca6
检查初始化结果
在 master 节点上执行
kubectl get nodes
输出结果如下所示:
NAME STATUS ROLES AGE VERSION
master Ready master 28m v1.17.0
worker1 Ready <none> 8m59s v1.17.0
worker2 NotReady <none> 13s v1.17.0