准备
192.168.100.111 Master
192.168.100.112 Slave1
192.168.100.113 Slave2
一、安装docker
#安装docker的yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#刷新缓存
yum makecache
#安装docker(--allowerasing 替换掉冲突的包)
yum -y install docker-ce-19.03.15 --allowerasing
#启动docker服务
systemctl enable docker && systemctl start docker
#运行docker的hello-world
docker run hello-world
二、安装Kubernates
1.编辑Kubernetes的yum源
vim /etc/yum.repos.d/Kubernetes.repo
内容如下:
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
2、安装启动
-
关闭seliunx
#临时关闭 setenforce 0 #修改配置文件关闭 永久关闭 setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
-
关闭swap
#临时关闭 swapoff -a #修改配置文件 永久关闭 swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab #查看 free
-
关闭防火墙
systemctl stop firewalld systemctl disable firewalld
不然会报以下错误
#安装 yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0 #启动 systemctl enable kubelet && systemctl start kubelet
三、配置Master节点
1、初始化Master节点
kubeadm init --kubernetes-version=1.20.0 --apiserver-advertise-address=192.168.100.111 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.20.0.0/16 --pod-network-cidr=10.244.0.0/16
其中--apiserver-advertise-address是本机地址
--pod-network-cidr=10.244.0.0/16要与kube-flannel.yml里的net-conf.json地址一致
2、完成配置
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
3、更改cgroupdriver
-
docker
vim /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"] } systemctl daemon-reload systemctl restart docker
-
kubelet
vim /var/lib/kubelet/config.yaml cgroupDriver: systemd #将该字段的cgroupfs修改为systemd
四、配置Slave节点
1、启动Slave
- 通过步骤
一、安装docker
和二、安装Kubernates
后
在Master节点执行kubeadm token create --print-join-command:
得到加入Master的命令
在获取到Master上的kubeadm join参数后,就可以登录Node进行初始化,加入集群。具体命令及参数在Master安装成功界面上已经给出提示,如下所示。[root@node-111 ~]# kubeadm token create --print-join-command kubeadm join 192.168.100.111:6443 --token sc2db6.kkkca6ykgvnh196m --discovery-token-ca-cert-hash sha256:2167903863b3493c2712524268b6c964b0c0d0d16d70dba52d4b07cd23d87e5c
- 在分别在Slave1、Slave2节点直接执行上述命令
kubeadm join 192.168.100.111:6443 --token sc2db6.kkkca6ykgvnh196m --discovery-token-ca-cert-hash sha256:2167903863b3493c2712524268b6c964b0c0d0d16d70dba52d4b07cd23d87e5c
五、后续配置
1、查看节点状态
[root@node-111 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
node-111 NotReady control-plane,master 3h51m v1.20.0
node-112 NotReady <none> 73m v1.20.0
node-113 NotReady <none> 3m8s v1.20.0
可以看到现在节点状态都是NotReady
状态;
2、查看kube-system下各个Pod的状态
运行kubectl get pod --namespace=kube-system命令:
[root@node-111 ~]# kubectl get pod --namespace=kube-system
NAME READY STATUS RESTARTS AGE
coredns-7f89b7bc75-4f5bp 0/1 Pending 0 3h57m
coredns-7f89b7bc75-vjs9x 0/1 Pending 0 3h57m
etcd-node-111 1/1 Running 0 3h57m
kube-apiserver-node-111 1/1 Running 0 3h57m
kube-controller-manager-node-111 1/1 Running 0 3h57m
kube-proxy-2b7vz 1/1 Running 0 9m14s
kube-proxy-94gmp 1/1 Running 0 3h57m
kube-proxy-hsbzc 1/1 Running 0 79m
kube-scheduler-node-111 1/1 Running 0 3h57m
可以看到coredns
是Pending
状态
3、安装flannel
接下来,解决coredns
的问题,这是由于还没有安装网络组件而造成的。本例中选择使用Flannel
,因此需要在各个节点部署Flannel
,具体命令如下:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
由于国内网络问题,可以才去下面的离线模式
-
新建
kube-flannel.yml
vim kube-flannel.yml
内容如下:
kube-flannel.yml -
下载flannel docker镜像
地址: https://github.com/flannel-io/flannel/releases/download/v0.18.1/flanneld-v0.18.1-amd64.docker 上传至服务器/mnt/flanneld-v0.18.1-amd64.docker 执行: [root@node-111 ~]# docker load < /mnt/flanneld-v0.18.1-amd64.docker Loaded image: flannelcni/flannel:v0.18.1-amd64
-
重命名
docker tag flannelcni/flannel:v0.18.1-amd64 quay.io/coreos/flannel:v0.18.1-amd64
-
安装flannel插件
kubectl apply -f kube-flannel.yml
六、管理台安装:
1、在线安装
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
2、如果网络不通可以离线安装
-
编辑安装配置文件
vim recommended.yaml
加入以下内容
-
安装
kubectl apply -f recommended.yaml
-
查看安装
[root@node-111 ~]# kubectl get svc --all-namespaces NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default kubernetes ClusterIP 10.20.0.1 <none> 443/TCP 81m kube-system kube-dns ClusterIP 10.20.0.10 <none> 53/UDP,53/TCP,9153/TCP 81m kubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.20.82.88 <none> 8000/TCP 25m kubernetes-dashboard kubernetes-dashboard ClusterIP 10.20.89.158 <none> 443/TCP 25m
删除现有的dashboard服务,dashboard 服务的 namespace 是 kubernetes-dashboard,但是该服务的类型是ClusterIP,不便于我们通过 浏览器访问,因此需要改成NodePort型的
#删除安装 kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard
-
创建配置文件
vim dashboard-svc.yaml # 内容 kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: NodePort ports: - port: 443 targetPort: 8443 selector: k8s-app: kubernetes-dashboard # 执行 kubectl apply -f dashboard-svc.yaml
-
再次查看服务,成功(注意POST为31717,登录的端口)
[root@node-111 ~]# kubectl get svc --all-namespaces NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default kubernetes ClusterIP 10.20.0.1 <none> 443/TCP 86m kube-system kube-dns ClusterIP 10.20.0.10 <none> 53/UDP,53/TCP,9153/TCP 86m kubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.20.82.88 <none> 8000/TCP 31m kubernetes-dashboard kubernetes-dashboard NodePort 10.20.200.185 <none> 443:31717/TCP 10s
-
想要访问dashboard服务,就要有访问权限,创建kubernetes-dashboard管理员角色
vim dashboard-svc-account.yaml # 结果 apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kube-system --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dashboard-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kube-system roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io # 执行 kubectl apply -f dashboard-svc-account.yaml
-
获取token
[root@node-111 ~]# kubectl get secret -n kube-system |grep admin|awk '{print $1}' dashboard-admin-token-tgfpn #复制下面的token登录要用 [root@node-111 ~]# kubectl describe secret dashboard-admin-token-tgfpn -n kube-system|grep '^token'|awk '{print $2}' eyJhbGciOiJSUzI1NiIsImtpZCI6IlYzM1BiOVpYVzhLcGZzUkVUTS1YcmstUkhmZTNpWG1maHdiMENtdjY2dmsifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tdGdmcG4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZDQzMDVhYzUtMDcyYy00ZTZhLWJlMGMtYThkZDg0ODA2ZmQ4Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.M5k7LwWq-ILaC2vcTtZT_fDdwGBgnDtr5UGzo_pcIJclnex8VCZfLEIHHA6yjULWmH9d6Yf760RrH9xiizGIzh4S8QK5Xu2sDI-WHYalv_EdodsPmwz5im__37GlPw7O3thj1l34T0zNQWiE4FDK0f1uP1Heykv4RIjvFeEVcED9-eViVl37H5MseUCvO6bGgDkOjjOjy2I3MfJC7c7wN6NNn5vfTMNKXFmK5teU6orPAqGapwzHg8ENJGuZIwoLmzDHadMqw5qBOS1T_tMyTZkBSucGWPriarkDIPG24f_atEYX5sNssthBB-Q0Y5Il_XS21g7bKfMSbQORqbOJDQ
-
访问https://192.168.100.111:31717
把上面的 token 粘贴到令牌:
七、常用命令
kubectl get pod --all-namespaces -o wide
查看所有的podkubeadm reset
重置节点kubectl get nodes
查看所有节点状态journalctl -xeu kubelet
查看运行日志kubectl describe pods [PodName] --namespace=[NameSpace]
查看pod详情kubectl get svc --all-namespaces
查看所有的svc
八、报错解决
kubeadm init 报错 ”unknown service runtime.v1alpha2.RuntimeService”
https://blog.csdn.net/weixin_40668374/article/details/124849090