四组基本概念

Pod/Pod控制器
  • pod是k8s能够运行的最小单元(原子单元)
  • 一个pod运行多个容器,他们共享UTS+NET+IPC名称空间(sidecar 边车模式)
  • pod控制器是pod启动的一种模板,用来保证在k8s里启动的pod都按照预期运行(副本数,生命周期,健康状态检查)
  • k8s提供了很多的pod控制器,常用的是Deployment DaemonSet 。。。
Name/Namespace
  • name 对应“资源”,每个“资源”都应该有它对应的名称。资源通常包括以下信息,api版本,类别,元数据,定义清单(spec),状态,等配置信息,name通常定义在资源的元数据中。
  • k8s中隔离各种资源的方法是,名称空间,可以理解为虚拟集群组
  • 不同名称空间的资源名可以相同,同一名称空间的同种资源名字不能重复
  • k8默认的名称空间有 default、kube-system、kube-public 等,并且查询相应的资源要带上相应的名称空间
Lable/Lable选择器
  • 一个资源对应多个标签,一个标签也可能对应多个资源,是多对多的关系。类似的还有注解
  • 标签组成 key=value。
  • 给资源打上标签后,可以通过标签选择器过滤标签
  • 标签选择器目前有两个:1.基于等值关系,等于或者不等于,2.基于集合关系,属于,不属于,存在。
  • 许多资源支持内嵌标签选择器:matchlable, matchexpressions
Service/Ingress
  • 一个service可以看做是一组提供相同服务的pod的对外接口
  • service作用于那些pod是根据标签选择器确定的
  • service只能用于IPV4的调度:ip+port
  • ingress是应用对外暴露的接口,作用于不同的业务域,不同url访问路径的业务流量

k8s核心组件

  • 配置存储中心 ——》etcd服务
  • 主控节点 ——》(master)节点
          kube-apiserver服务
          kube-controller-manage服务
          kube-scheduler服务
  • 运算节点 ——》(node)节点
          kube-kubelet服务
          kube-proxy服务
  • CLI客户端——》
          kubectl

k8s核心附件

  • CNI网路插件 ——》flannel/calico
  • 网路发现插件——》coredns
  • 服务暴露插件——》traefik
  • GUI管理插件——》Dashboard

k8s安装部署

MiniKube

可以直接使用官网的web版,打开下面链接,点击Launch Terminal
https://kubernetes.io/docs/tutorials/hello-minikube/
等待加载完毕,执行命令

kubectl get pods -n kube-system

结果如下:
在这里插入图片描述
这里可以看到k8s的一些关键组件已经全部安转完成。

kubeadmin部署(快速搭建)
前置条件
  • 一台或多台机器,操作系统 CentOS7.x-86_x64
  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
  • 集群中所有机器之间网络互通
  • 可以访问外网,需要拉取镜像
  • 禁止swap分区
1.准备环境(所有节点)
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

关闭selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

关闭swap:
swapoff -a $ 临时
vim /etc/fstab $ 永久

将桥接的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

安装docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version

添加阿里云yum源
cat > /etc/yum.repos.d/kubernetes.repo << EOF 
[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

安装kubeadm,kubelet和kubectl
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
systemctl enable kubelet

sudo systemctl enable kubelet
sudo systemctl start kubelet
2.配置master节点
kubeadm init \ 
--apiserver-advertise-address=192.168.10.100 \ 
--image-repository registry.aliyuncs.com/google_containers \ 
--kubernetes-version v1.15.0 \ 
--service-cidr=10.1.0.0/16 \ 
--pod-network-cidr=10.244.0.0/16

注意:记录打印的最后一句话,如下

kubeadm join 192.168.10.100:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:3546d6256e9c3ea1c8224f45637fedb90870b21b0ec41a355e2fb8de46d5962d
使用kubectl工具:
mkdir -p $HOME/.kube 
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
sudo chown $(id -u):$(id -g) $HOME/.kube/config 
kubectl get nodes

配置flannel网络
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

修改kube-flannel.yaml中的网络和kubeadm.conf中的podsubne一致
然后加载配置文件
kubectl apply -f kube-flannel.yml 

等待status 变为 ready
kubectl get nodes
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   24h   v1.15.0

如果镜像拉取失败,手动拉取镜像
docker pull quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
docker tag quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
3.配饰node节点

将master中的admin.conf 拷贝到node中

scp /etc/kubernetes/admin.conf root@192.168.10.101:/home/wd/

在node中配置,并加入集群

mkdir -p $HOME/.kube
sudo cp -i $HOME/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubeadm join 192.168.10.100:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:3546d6256e9c3ea1c8224f45637fedb90870b21b0ec41a355e2fb8de46d5962d

查看节点是否加入成功

[root@k8s-master wd]# kubectl get nodes
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   24h   v1.15.0
k8s-node1    Ready    <none>   24h   v1.15.0
通过yaml文件部署应用

创建mysql_repl.yaml

apiVersion: v1
kind: ReplicationController                           
metadata:
  name: mysql                                          
spec:
  replicas: 1                                          #Pod副本的期待数量
  selector:
    app: mysql                                         #符合目标的Pod拥有此标签
  template:                                            #根据此模板创建Pod的副本(实例)
    metadata:
      labels:
        app: mysql                                     #Pod副本拥有的标签,对应RC的Selector
    spec:
      containers:                                      #Pod内容器的定义部分
      - name: mysql                                    #容器的名称
        image: hub.c.163.com/library/mysql              #容器对应的Docker image
        ports: 
        - containerPort: 3306                          #容器应用监听的端口号
        env:                                           #注入容器内的环境变量
        - name: MYSQL_ROOT_PASSWORD 
          value: "123456"

通过文件部署应用

部署命令
kubectl create -f mysql_repl.yaml

等待一段时间后查看
kubectl get pods
查看描述
kubectl describe pod mysql

此时mysql部署完成,但是外网无法访问
创建mysql_serc.yaml 文件

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  type: NodePort
  ports:
    - port: 3306
      nodePort: 30001
  selector:
    app: mysql
部署
kubectl create -f mysql_serc.yaml 

查看端口,此时端口映射完毕,查看外网端口
kubectl get service
配置webui(dashboard)
获取dashboard 的yaml文件
wget wget
https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

修改文件
vim kubernetes-dashboard.yaml
修改镜像image字段如下
image: registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
修改service 的spec字段如下
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30000
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort

运行文件
kubectl apply -f kubernetes-dashboard.yaml
查看端口映射情况,如下表示正常运行
kubectl -n kube-system get service
kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   24h
kubernetes-dashboard   NodePort    10.102.240.20   <none>        443:30000/TCP            85

在火狐浏览器中访问 https://你的id:30000,会提示kubeconfig或者token
此时需要

创建一个SA Service Account
kubectl create serviceaccount dashboard-admin -n kube-system

创建一个Cluster rolebinding
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

//查看token 复制打印出的token,粘贴到浏览器中的token中就可以登录了
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

效果如下:以后我们可以直接webui控制k8s
在这里插入图片描述
至此k8s安装部署完成

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐