一、环境要求
服务器配置最低不能低于2核2G
二、安装docker-ce
#所有节点
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repowget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.reposed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repoyum list docker-ce --showduplicates#安装指定版本的dockeryum install docker-ce-18.09.7 -y
检查
[root@k8s-node1 docker_rpm]# docker version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:03:45 2020
OS/Arch: linux/amd64
Experimental: false
二、安装kubeadm、kubectl、kubelet
配置阿里云源,所有节点配置
[root@k8s-node1 docker_rpm]# cat /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
所有节点安装
yum install kubelet-1.15.12 kubeadm-1.15.12 kubectl-1.15.12 -y
三、初始化集群
启动docker
所有节点配置
[root@k8s-master-01 docker_rpm]# cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
[root@k8s-master-01 docker_rpm]# systemctl restart docker[root@k8s-master-01 docker_rpm]#docker info ##没有警告就行
关闭swap
临时关闭 swapoff -a
永久关闭 vim /etc/fstab #掉swap
控制节点,master节点执行
所有节点都执行配置docker配置文件 [root@k8s-master-01 docker_rpm]# cat /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"] } 重启docker [root@k8s-master-01 docker_rpm]# systemctl restart docker kubeadm init --kubernetes-version=v1.15.12 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --service-cidr=10.254.0.0/16
按照报错提示进行修改
所有节点操作
[root@kubernetes-node1 docker_rpm]# cat /etc/hosts
10.0.0.111 kubernetes-master
10.0.0.112 kubernetes-node1
node节点操作
[root@k8s-node1 docker_rpm]# hostnamectl set-hostname kubernetes-node1
master节点操作
[root@k8s-node1 docker_rpm]# hostnamectl set-hostname kubernetes-master
master节点操作
systemctl enable docker.service
systemctl enable kubelet.service
master节点操作
[root@k8s-master-01 docker_rpm]# mkdir -p $HOME/.kube
[root@k8s-master-01 docker_rpm]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master-01 docker_rpm]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
node节点按照master节点的提示进行执行
kubeadm join 10.0.0.111:6443 --token fafsq5.axnpfv6lyni4m22l \
--discovery-token-ca-cert-hash sha256:c847bff2ca59d06a0ea40d2dfe5755a674ca3ce17dc278d1236b2954d2b52d80
systemctl enable kubelet.service
systemctl enable docker.service如果重启docker失败了,请检查daemon.json文件后面的空格
master节点可以查看
kubectl -n kube-system get cm kubeadm-config -oyaml
进行检查
[root@k8s-master-01 docker_rpm]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master-01 NotReady master 8m53s v1.15.12
kubernetes-node1 NotReady <none> 7m v1.15.12
[root@k8s-master-01 docker_rpm]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true"}
[root@k8s-master-01 docker_rpm]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-94d74667-nmcqv 0/1 Pending 0 11m
kube-system coredns-94d74667-x94zh 0/1 Pending 0 11m
kube-system etcd-k8s-master-01 1/1 Running 0 11m
kube-system kube-apiserver-k8s-master-01 1/1 Running 0 11m
kube-system kube-controller-manager-k8s-master-01 1/1 Running 0 11m
kube-system kube-proxy-hz4nr 0/1 Error 0 10m
kube-system kube-proxy-zvnnw 1/1 Running 0 11m
kube-system kube-scheduler-k8s-master-01 1/1 Running 0 11m
二、token过期解决
客户端的token默认是一天过期
创建token
[root@k8s-master-01 docker_rpm]# kubeadm token create --print-join-command
查看证书
[root@k8s-master-01 docker_rpm]# kubeadm token list
三、配置网络flannel
pull镜像
所有节点都操作
docker pull quay.io/coreos/flannel:v0.12.0-amd64
master节点执行
[root@k8s-master-01 k8s_yaml]# kubectl apply -f kube-flannel.yml
检查
[root@k8s-master-01 k8s_yaml]# kubectl get nodes
[root@k8s-master-01 k8s_yaml]# kubectl get pod -n kube-system
发现错误,最后将node节点执行
rm -fr /etc/docker/daemon.json
四、kube tab补全
[root@kubernetes-master k8s_yaml]# soutce <(kubectl completion bash)
[root@kubernetes-master k8s_yaml]# echo "source <(kubectl completion bash)" >> /root/.bashrc
五、静态pod 动态pod
打标签
[root@kubernetes-master k8s_yaml]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-master-01 Ready master 72m v1.15.12 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master-01,kubernetes.io/os=linux,node-role.kubernetes.io/master=
kubernetes-node1 Ready master 70m v1.15.12 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kubernetes-node1,kubernetes.io/os=linux,node-role.kubernetes.io/master=
[root@kubernetes-master k8s_yaml]# kubectl label nodes kubernetes-node1 node-role.kubernetes.io/master=
node/kubernetes-node1 labeled
静态pod是走本地(/etc/kubernetes/manifests)
动态pod是走etcd
静态pod后缀名是kubernetes-master,将yaml文件放入到本地,pod自己创建。
动态pod需要执行kubectl create -f nginx.yaml 写入到etcd数据库中。
六、安装dashboard服务
有问题请加博主微信进行沟通!
全部评论