k8s官方文档:Kubernetes 文档 | Kubernetes
服务配置为一主两从:
k8s-master: 192.168.88.137
k8s-node1: 192.168.88.139
k8s-node2: 192.168.88.140
安装环境为VMware上的Centos 7,要求配置至少为2核2G,Centos镜像下载:
链接:https://pan.baidu.com/s/1eL4SmkbPBU19spmVu1IYQw
提取码:4frp
安装 docker
首先需要在三台服务器上安装docker。
- 安装docker的yum源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
- 安装docker
yum -y install docker-ce-18.06.1.ce-3.el7
- 设置docker开机启动
systemctl enable docker && systemctl start docker
- 检查docker是否安装成功
docker -v
打印如下即安装成功:
准备工作
在安装k8s之前,需要对三台服务器进行一些环境准备工作,需要三台机器都执行一下操作。
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- 永久关闭
selinux
vim /etc/sysconfig/selinux
如下,将SELINUX
设置为disabled
:
- 再临时关闭
selinux
setenforce 0
- 关闭
swap
先临时关闭:
swapoff -a
永久关闭:
sed -i.bak '/swap/s/^/#/' /etc/fstab
重启生效:
systemctl reboot
查看下swap交换区是否都为0,如果都为0则swap关闭成功
free ‐m
- 给三台机器分别设置主机名
hostnamectl set-hostname <hostname>
第一台:k8s-master
第二台:k8s-node1
第三台:k8s-node2
- 修改
hosts
文件,注意替换为自己服务器的ip
cat <<EOF > /etc/hosts
192.168.88.137 k8s-master
192.168.88.139 k8s-node1
192.168.88.140 k8s-node2
EOF
- 将桥接的
IPv4
流量传递到iptables
修改内核参数:
vim /etc/sysctl.d/k8s.conf
加上配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
执行命令使配置生效:
sysctl -p /etc/sysctl.d/k8s.conf
- 设置时间同步
yum install ntpdate -y
ntpdate time.windows.com
- 添加
k8s
yum
源
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=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
- 如果之前安装过
k8s
,先卸载旧版本
yum remove ‐y kubelet kubeadm kubectl
- 查看可安装的版本
yum list kubelet --showduplicates | sort -r
- 安装
kubelet
、kubeadm
、kubectl
指定版本,我们使用kubeadm
方式安装k8s集群
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
如果报错如下:
解决方案,新建一个python文件:
cd /usr/lib/python2.7/site-packages/
touch sitecustomize.py
vim sitecustomize.py
文件里面写入如下内容:
import sys
sys.setdefaultencoding('UTF-8')
- 设置开机启动
k8s
systemctl enable kubelet && systemctl start kubelet
配置集群
- 在
k8s-master
机器上执行初始化操作,第一个ip
是当前机器ip
,后面两个固定
kubeadm init --apiserver-advertise-address=192.168.88.137 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
如果发生如下错误:
执行命令:
kubeadm reset
如发生下面错误:
删除该文件:
rm -rf /var/lib/etcd
执行 成功后显示如下:
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.88.137:6443 --token j7g3dx.71lrimwdqpm9ye1v \
--discovery-token-ca-cert-hash sha256:a83ca369b401c53155f36865a4720c3c45e99ae5d58a5ce3cb000c5f4ef36f27
- 在主节点执行提示的命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 查看
kubectl
能否正常使用
kubectl get nodes
- 安装
Pod
网络插件
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
如果上面的不成功,可以试试下面这个:
kubectl apply ‐f https://raw.githubusercontent.com/coreos/flannel/mast
er/Documentation/kubeflannel.yml
- 在所有的子节点的服务器上执行上面提示的加入集群的命令
kubeadm join 192.168.88.137:6443 --token j7g3dx.71lrimwdqpm9ye1v \
--discovery-token-ca-cert-hash sha256:a83ca369b401c53155f36865a4720c3c45e99ae5d58a5ce3cb000c5f4ef36f27
- 在主节点机器执行查看节点命令,可以看到各节点状态,至此集群搭建完毕
kubectl get nodes
公网部署
- 将下面命令的
--apiserver-advertise-address=192.168.88.137
的ip地址改为服务器的公网ip:
kubeadm init --apiserver-advertise-address=192.168.88.137 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
- 当命令运行阻塞至以下信息时候,新建一个服务器连接,修改
etcd.yaml
文件:
阻塞信息:
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
新建一个服务器连接,修改etcd.yaml
vim /etc/kubernetes/manifests/etcd.yaml
将其中的三行修改为:
- --listen-client-urls=https://127.0.0.1:2379
- --listen-metrics-urls=http://127.0.0.1:2381
- --listen-peer-urls=https://127.0.0.1:2380
- 关闭新的连接,等待安装完成,其他过程不变
- 使用 iptables IP 重定向,使系统访问工作节点内网 IP 时转而访问工作节点的外网 IP
iptables -t nat -A OUTPUT -d <内网 IP> -j DNAT --to-destination <外网 IP>
可视化界面安装
- 通过命令安装
dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
如果无法下载,则直接用下面的地址:
kubectl apply -f https://blog.fpg.ink/upload/2022/01/recommended-e261700d70b6468092438e65596ad9b1.yaml
- 设置访问端口,将
type: ClusterIP
改为type: NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
- 创建访问账号,创建一个文件
dash.yaml
直接执行命令
kubectl apply -f https://blog.fpg.ink/upload/2022/01/dash-538a89b6db6f4de9a5eb420cc5f783aa.yaml
或者:
#创建访问账号,准备一个yaml文件; vi dash.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
执行命令
kubectl apply -f dash.yaml
- 获取访问令牌
#获取访问令牌
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
eyJhbGciOiJSUzI1NiIsImtpZCI6InhicXE1M3VnTXlnMnVLX2VlQ1N0SjFNNC1mU05Gd1RKcnBLT2pSd3VUNVUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXE4NmtmIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI0Nzc3ZGY2Yi0zNjBiLTQ1M2MtYjI2My03ODNjZWVkYWY1NDciLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.nNu_ToT1Fu8zEHE5KON5W29FQFTVE0hHT6R5JUx8LMVcI06wF7n1VwpD7d8EEgAx3MalOdjF7C6LbAGQwLQdsPm5v7q9DPSeLw-0dJ7CPMrv8C4UBSSUn3qGCRQhDa0QGIjfvge99CVPkgm-kwIgFubqOb7dZmQozS44qPdZ2O3Mad758M2BBdKHQjPzFtxHyJMrEKIj374mdMJaaIsTCNpovIakFbsgwapqGHe2N4n281HqiS0RvGYD5XSXKSN2irG7vjb-cBX81ntX-7aXgdyPC6Eu0Qt4OSIemuWuf7T-8CVttQWm12rrZKkZRdMFXiYjf18oPUIwanjIktB8ag
- 获取端口映射信息
kubectl get svc -A
- 访问https://192.168.88.137:31927,输入令牌即可访问,输入刚刚获取到的
token
即可进入