
kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 [1] 传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。 新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。 容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”,这更便于监控和管理。
1、禁用swap
1.1、临时禁用
swapoff -a
1.2、永久禁用swap
注释swap一行
vim /etc/fstab

2、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
3、关闭selinux
sed -i 's/enforcing/disable/' /etc/selinux/config
setenforce 0
4、添加主机名与ip对应关系(所有节点)
vim /etc/hosts
192.0.0.171 k8s-master
192.0.0.141 k8s-node1
5、将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
6、所有节点安装Docker/kubeadm/kubelet/kubectl
k8s默认CRI(容器运行时)为docker
6.1、Docker安装
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io -y
systemctl start docker
systemctl enable docker
docker --version # 指定18.09.9版本
6.2、添加阿里云kubernetesYUM软件源
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=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
EOF
6.3、安装
yum install -y kubelet-1.16.4 kubeadm-1.16.4 kubectl-1.16.4
systemctl enable kubelet && systemctl start kubelet
7、部署k8s Master
7.1、重置master(看自己需要,如果之前部署过)
kubeadm reset
rm -rf $HOME/.kube/config
7.2、部署master
kubeadm init --kubernetes-version=1.16.4 \
--apiserver-advertise-address=192.0.0.171 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
7.2.1、记录生成的最后部分内容
kubeadm join 192.0.0.171:6443 --token qkgwxh.2dkyy2b699a00rdy \
--discovery-token-ca-cert-hash sha256:e73abc5afc2f0c532b65a9e1c5cf80d69f6e6553d4660a6a457ff502b7d9d8c8
7.2.2、创建kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
7.2.3、kubectl可以自动补充
source <(kubectl completion bash)
7.2.4、安装网络插件flannel
node节点都需要拉取flannel镜像
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
7.2.5、查看pod
kubectl get pods -n kube-system

8、部署k8s node
kubeadm join 192.0.0.171:6443 --token qkgwxh.2dkyy2b699a00rdy \
--discovery-token-ca-cert-hash sha256:e73abc5afc2f0c532b65a9e1c5cf80d69f6e6553d4660a6a457ff502b7d9d8c8
出现 Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
加入成功,master节点查看nodes
kubectl get nodes
9、测试集群
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
等待容器启动完成,使用nodeIP+port,进行访问
10、安装kubernetes-dashboard
10.1、下载ymal
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-bate8/aio/deploy/recommended.yaml
10.2、配置yaml
sed -i 's/kubernetesui/registry.cn-hangzhou.aliyuncs.com\/loong576/g' recommended.yaml
10.3、配置NodePort
sed -i '/targetPort: 8443/a\ \ \ \ \ \ nodePort: 30002\n\ \ type: NodePort' recommended.yaml
10.4、部署dashboard
kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard
kubectl get pods,svc -n kubernetes-dashboard

10.5、登陆dashboard
访问地址,注意是https,使用火狐浏览器
https://<nodeIP><nodePort>
10.6、创建管理员
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
10.7、获取token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | grep dashboard-admin | awk '{print $1}')
10.8、登陆输入token即可

