Kubernetes(二)

第七章 常用资源类型

1.工作负载类型
  RC  ReplicaController
  RS  ReplicaSet 
  DP  Deployment
  DS  DaemonSet  

2.服务发现及负载均衡
  Service 
  Ingress 

3.配置与存储资源
  ConfigMap 存储配置文件
  Secret    存储用户字典

4.集群级别资源
  Namespace
  Node
  Role
  ClusterRole
  RoleBinding
  ClusterRoleBinding


第2章 资源配置清单
1.创建资源的方法
  apiserver仅能接受json格式的资源定义 
  yaml格式提供的清单,apiserver可以自动将其转换为json格式再提交

2.资源清单介绍
  查看资源清单所需字段
  kubectl explain pod

  资源清单字段介绍
  apiVersion: v1  #属于k8s哪一个API版本或组
  kind: Pod   #资源类型
  metadata:   #元数据,嵌套字段
  spec:       #定义容器的规范,创建的容器应该有哪些特性
  
  status:     #只读的,由系统控制,显示当前容器的状态


  json嵌套
{ 1级:
     { 2级:
          { 3级:Value

          }
      }
}


3.查看资源清单嵌套的命令
  kubectl explain pod
  kubectl explain pod.spec
  kubectl explain pod.spec.volumes

4.使用命令行创建一个pod
  kubectl create deployment nginx --image=nginx:alpine
  kubectl get pod -o wide


5.将刚才创建的pod配置到处成yaml格式
  kubectl get pod -o yaml > nginx-pod.yaml
  
  精简资源清单,删掉不需要的配置
cat nginx-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:alpine
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80

  json格式写法:
{
 apiVersion: "v1",
 kind: "Pod",
 metadata: 
   {
      name: "nginx", 
      labels: 
        {
           app: "nginx"
        }        
    }
 spec: 
   {
     containers:
       {
         name: "nginx",
         image: "nginx:alpine",
         imagePullPolicy: "IfNotPresent"
       }
   }    
}       

  删除命令行创建的资源
  kubectl delete deployments.apps nginx

  应用资源配置清单
  kubectl create -f nginx-pod.yaml

  查看pod信息
  kubectl get pod -o wide

  查看pod详细信息
  kubectl describe pod nginx

第八章 资源配置清单

1.创建资源的方法
 apiserver仅能接受json格式的资源定义 
 yaml格式提供的清单,apiserver可以自动将其转换为json格式再提交

2.资源清单介绍
 查看资源清单所需字段
 kubectl explain pod

 资源清单字段介绍
 apiVersion: v1  #属于k8s哪一个API版本或组
 kind: Pod   #资源类型
 metadata:   #元数据,嵌套字段
 spec:       #定义容器的规范,创建的容器应该有哪些特性
 
 status:     #只读的,由系统控制,显示当前容器的状态


 json嵌套
{ 1级:
    { 2级:
         { 3级:Value

         }
     }
}


3.查看资源清单嵌套的命令
 kubectl explain pod
 kubectl explain pod.spec
 kubectl explain pod.spec.volumes

4.使用命令行创建一个pod
 kubectl create deployment nginx --image=nginx:alpine
 kubectl get pod -o wide


5.将刚才创建的pod配置到处成yaml格式
 kubectl get pod -o yaml > nginx-pod.yaml
 
 精简资源清单,删掉不需要的配置
cat nginx-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
 name: nginx
 labels:
   app: nginx
spec:
 containers:
 - name: nginx
   image: nginx:alpine
   imagePullPolicy: IfNotPresent
   ports:
   - name: http
     containerPort: 80

 json格式写法:
{
apiVersion: "v1",
kind: "Pod",
metadata: 
  {
     name: "nginx", 
     labels: 
       {
          app: "nginx"
       }        
   }
spec: 
  {
    containers:
      {
        name: "nginx",
        image: "nginx:alpine",
        imagePullPolicy: "IfNotPresent"
      }
  }    
}       

 删除命令行创建的资源
 kubectl delete deployments.apps nginx

 应用资源配置清单
 kubectl create -f nginx-pod.yaml

 查看pod信息
 kubectl get pod -o wide

 查看pod详细信息
 kubectl describe pod nginx
 
 
6.POD资源清单总结
 声明式管理 我想运行一个Nginx k8s帮你干活 
 
apiVersion: v1  #api版本
kind: Pod   #资源类型
metadata:   #元数据
 name: nginx   #元数据名称
 labels:   #pod标签
   app: nginx   
spec:       #容器定义
 containers:   #容器的特性
 - name: nginx #容器名称
   image: nginx:alpine #容器的镜像名称
   imagePullPolicy: IfNotPresent  #容器的拉取策略
   ports:      #容器端口
   - name: http 
     containerPort: 80  #容器暴露的端口

第九章 POD标签设置

1.标签说明
  一个标签可以给多个POD使用
  一个POD也可以拥有多个标签
    
2.查看POD标签
  kubectl get pod --show-labels

3.添加标签方法
方法1:直接编辑资源配置清单:
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
    release: beta
----------------------
方法2:命令行打标签
kubectl label pods nginx release=beta
kubectl label pods nginx job=linux
kubectl get pod --show-labels  


4.删除标签
kubectl label pod nginx job- 
kubectl get pod --show-labels


5.实验: 生成2个POD,打上不同的标签,然后根据标签选择
kubectl create deployment nginx --image=nginx:1.14.0
kubectl get pod --show-labels
kubectl label pods nginx-xxxxxxxx release=stable
kubectl get pod --show-labels

根据条件查看
kubectl get pods -l release=beta --show-labels 
kubectl get pods -l release=stable --show-labels 


根据条件删除
kubectl delete pod -l app=nginx

第十章 Node标签设置

1.查看node的标签
kubectl get node --show-labels

2.给node打标签
kubectl label nodes node2 CPU=Xeon
kubectl label nodes node3 disktype=ssd

3.编辑POD资源配置清单,使用node标签选择器
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.0
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
  nodeSelector:
    #CPU: Xeon
    disktype: SSD

4.删除容器重新创建
kubectl delete pod nginx
kubectl create -f nginx-pod.yaml

5.查看结果
kubectl get pod -o wide

6.删除节点标签

第十一章 部署harbor作为k8s镜像仓库

1.实验目标
  部署k8s私有镜像仓库harbor
  把demo小项目需要的镜像上传到harbor上
  修改demo项目的资源配置清单,镜像地址修改为harbord的地址

2.在node1上安装harbor
cd /opt/
tar zxf harbor-offline-installer-v1.9.0-rc1.tgz
cd harbor/

3.编辑harbor配置文件
vim harbor.yml
hostname: 10.0.0.11
port: 8888
harbor_admin_password: 123456
data_volume: /data/harbor

4.执行安装
yum install docker-compose -y
./install.sh

5.浏览器访问
http://10.0.0.11:8888
admin
123456

6.建立镜像仓库
这里有2种访问级别:
公开:任何人都可以直接访问并下载镜像
私有:登陆授权后才允许下载镜像

如果创建私有仓库,k8s是不能直接下载的,需要配置安全文件


7.所有节点都配置docker信任harbor仓库并重启docker
cat >/etc/docker/daemon.json <<EOF
    {
      "registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"],
      "exec-opts": ["native.cgroupdriver=systemd"],
      "insecure-registries" : ["http://10.0.0.11:8888"]
    }
EOF
systemctl restart docker

###############注意###############
在node1上重启docker后,如果harbor不正常了,重启harbor即可
cd /opt/harbor
docker-compose restart 

8.docker登陆harbor
docker login 10.0.0.11:8888
admin
123456

9.下载镜像修改tag并push到harbor上
docker pull nginx:1.14.0
docker tag nginx:1.14.0 10.0.0.11:8888/k8s/nginx:1.14.0
docker push 10.0.0.11:8888/k8s/nginx:1.14.0

docker pull tomcat-app:v1
docker tag kubeguide/tomcat-app:v1 10.0.0.11:8888/k8s/tomcat-app:v1
docker push 10.0.0.11:8888/k8s/tomcat-app:v1

docker pull mysql:5.7
docker tag mysql:5.7 10.0.0.11:8888/k8s/mysql:5.7
docker push 10.0.0.11:8888/k8s/mysql:5.7 

10.节点上删除镜像
docker rmi mysql:5.7 
docker rmi kubeguide/tomcat-app:v1
docker rmi 10.0.0.11:8888/k8s/mysql:5.7 
docker rmi 10.0.0.11:8888/k8s/tomcat-app:v1

11.删除以前的demo项目
kubectl delete -f tomcat-demo.yaml

12.修改demo项目的资源配置清单里的镜像地址
vim tomcat-demo.yaml
image: 10.0.0.11:8888/k8s/mysql:5.7
image: 10.0.0.11:8888/k8s/tomcat-app:v1

13.应用资源配置清单
kubectl create -f tomcat-demo.yaml 

14.报错
此时查看pod状态会发现镜像拉取失败了
[root@node1 ~/demo]# kubectl get pod
NAME                     READY   STATUS             RESTARTS   AGE
mysql-7d746b5577-jcs7q   0/1     ImagePullBackOff   0          8s
myweb-764df5ffdd-fptn9   0/1     ImagePullBackOff   0          8s
myweb-764df5ffdd-pmkz7   0/1     ErrImagePull       0          8s

查看pod创建的详细信息
kubectl describe pod mysql-7d746b5577-jcs7q 

关键报错信息:
Failed to pull image "10.0.0.11:8888/k8s/mysql:5.7": rpc error: code = Unknown desc = Error response from daemon: pull access denied for 10.0.0.11:8888/k8s/mysql, repository does not exist or may require 'docker login'


15.查看docker登陆的密码文件
docker login 10.0.0.11:8888
cat /root/.docker/config.json

16.将docker密码文件解码成base64编码
[root@node1 ~/demo]# cat /root/.docker/config.json|base64
ewoJImF1dGhzIjogewoJCSIxMC4wLjAuMTE6ODg4OCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZNVEl6TkR
VMiIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTguMDkuNyAobGludXgpIgo
JfQp9

17.创建并应用docker登陆的Secret资源
注意!!!
1.dockerconfigjson: xxx直接写base64的编码,不需要换行
2.base64编码是一整行,不是好几行
3.最后的type字段不能少

cat >harbor-secret.yaml<<EOF 
apiVersion: v1
kind: Secret
metadata:
  name: harbor-secret
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxMC4wLjAuMTE6ODg4OCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZNVEl6TkR
VMiIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTguMDkuNyAobGludXgpIgo
JfQp9

type: kubernetes.io/dockerconfigjson
EOF

kubectl create -f harbor-secret.yaml
kubectl get secrets

18.修改demo资源配置清单,添加拉取镜像的参数
查看命令帮助
kubectl explain deployment.spec.template.spec.imagePullSecrets
vim tomcat-demo.yaml 
 23       imagePullSecrets:
 24       - name: harbor-secret
 60       imagePullSecrets:
 61       - name: harbor-secret

19.应用资源配置清单并查看
kubectl create -f tomcat-demo.yaml 
kubectl get pod -o wide

20.浏览器查看
http://10.0.0.11:30001/demo