Kubernetes简介
1 | Kubernetes(简称K8S)是开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。 |
两种节点类型
- 管理节点:主要负责K8S集群管理,集群中各节点间的信息交互、任务调度,还负责容器、Pod、NameSpaces、PV等生命周期的管理。
- 工作节点:主要为容器和Pod提供计算资源,Pod及容器全部运行在工作节点上,工作节点通过kubelet服务与管理节点通信以管理容器的生命周期,并与集群其他节点进行通信。
环境准备
配置信息如下:
IP地址 | 节点角色 | hostname |
---|---|---|
192.168.100.10 | master | master |
192.168.100.11 | worker | node1 |
192.168.100.12 | worker | node2 |
1.设置主机名,所有主机分别进行设置(contos7)
hostnamectl set-hostname master
2.编辑/etc/hosts文件,添加域名解析
1
2
3
4
5cat << EOF >> /etc/hosts
192.168.100.10 master
192.168.100.11 node1
192.168.100.12 node2
EOF3.关闭防火墙、SELinux和swap
1
2
3
4
5
6
7
8
9# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭SELinux
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# 关闭swap,取消开机加载(如果有设置)
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab4.配置内核参数,将桥接的IPv4流量传递到iptables的链
1
2
3
4
5cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system5.配置国内相关安装源
1
2
3
4
5
6# 配置国内yum源
yum install -y wget # 安装wget
mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all && yum makecache
1 | # 配置国内Kubernetes源 |
1 | # 配置docker源 |
软件安装(如下所有节点均安装)
1.安装docker
1
2
3
4# docker服务为容器运行提供计算资源,是所有容器运行的基本平台。
yum install -y docker-ce
systemctl enable docker && systemctl start docker
docker --version2.安装kubeadm、kubelet、kubectl
1
2
3
4
5# Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。
# Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。
# Kubectl是Kubernetes集群管理工具。
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
部署master节点
- 1.在master进行kubernetes集群初始化
1 | # 定义POD的网段为: 10.244.0.0/16,api server地址就是master本机IP地址。 |
1 | # 集群初始化成功后返回如下信息: |
2.配置kubectl工具
1
2
3
4
5
6
7
8
9
10
11
12
13
14mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config
kubectl get nodes
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 17m v1.15.3
node1 Ready <none> 110s v1.15.3
node2 Ready <none> 62s v1.15.3
kubectl get cs
[root@master ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true"}3.部署flannel网络
1
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
部署node节点
1 | # node节点上加入到kubernetes集群 |
集群状态检测
1.在master节点检查集群状态
1
2
3
4
5
6
7kubectl get nodes
# 重点查看STATUS内容为Ready时,则说明集群状态正常。
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 18m v1.15.3
node1 Ready <none> 2m45s v1.15.3
node2 Ready <none> 117s v1.15.32.创建pod以验证集群是否正常
1
2
3kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
部署Dashboard
- 1.创建Dashboard的yaml文件
1
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
1 | # 使用如下命令或直接手动编辑kubernetes-dashboard.yaml文件 |
手动编辑kubernetes-dashboard.yaml文件时,需要修改两处内容,首先在Dashboard Deployment部分修改Dashboard镜像下载链接,由于默认从官方社区下载,而不“科学上网”是无法下载的,因此修改为:image: loveone/kubernetes-dashboard-amd64:v1.10.1 修改后内容如图
此外,需要在Dashboard Service内容加入nodePort: 30001和type: NodePort两项内容,将Dashboard访问端口映射为节点端口,以供外部访问,编辑完成后,状态如图
2.部署Dashboard
1
kubectl create -f kubernetes-dashboard.yaml
3.检查相关服务运行状态
1
2
3
4kubectl get deployment kubernetes-dashboard -n kube-system
kubectl get pods -n kube-system -o wide
kubectl get services -n kube-system
netstat -ntlp|grep 300014.浏览器访问测试Dashboard访问地址:https://192.168.100.10:30001
5.查看访问Dashboard的认证令牌
1
2
3kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
- 6.使用输出的token登录Dashboard