Kubernetes安装与基础配置
   
    
     kubernetes官网地址
    
   
https://kubernetes.io/
kubernets中文社区地址:
https://www.kubernetes.org.cn/
    
     硬件安装要求
    
   
| 序号 | 硬件 | 要求 | 
|---|---|---|
| 1 | CPU | 至少2核 | 
| 2 | 内存 | 至少3G | 
| 3 | 硬盘 | 至少50G | 
    
     演示集群节点
    
   
| 主机名 | 主机 IP | 
|---|---|
| k8s-master01 | 192.168.198.156 | 
| k8s-node01 | 192.168.198.157 | 
| k8s-node02 | 192.168.198.158 | 
| k8s-node03 | 192.168.198.159 | 
    
    
    centos7系统配置
   
    
    
    centos下载地址:
   
推荐大家使用centos7.6以上版本。
http://mirrors.aliyun.com/centos/7/isos/x86_64/
查看centos系统版本命令:
cat /etc/centos-release
    
    
    配置阿里云yum源
   
1.下载安装wget
yum install -y wget
2.备份默认的yum
mv /etc/yum.repos.d /etc/yum.repos.d.backup
3.设置新的yum目录
mkdir -p /etc/yum.repos.d
4.下载阿里yum配置到该目录中,选择对应版本
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
5.更新epel源为阿里云epel源
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
wget -O /etc/yum.repos.d/epel-testing.repo http://mirrors.aliyun.com/repo/epel-testing.repo
6.重建缓存
yum clean all
yum makecache
7.看一下yum仓库有多少包
yum repolist
yum update
    
    
    升级系统内核
   
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt
grep initrd16 /boot/grub2/grub.cfg
grub2-set-default 0
reboot
查看centos系统内核命令:
uname -r
uname -a
查看CPU命令:
lscpu
查看内存命令:
free
free -h
查看硬盘信息
fdisk -l
    
    
    
     关闭防火墙
    
   
勿在生产环境操作
systemctl stop firewalld
systemctl disable firewalld
    
    
    
     关闭selinux
    
   
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforce 0
    
    
    
     网桥过滤
    
   
vi /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
net.ipv4.ip_forward=1
net.ipv4.ip_forward_use_pmtu = 0
生效命令
sysctl --system
查看效果
sysctl -a|grep "ip_forward"
    
    
    
     开启IPVS
    
   
安装IPVS
yum -y install ipset ipvsdm
编译ipvs.modules文件
vi /etc/sysconfig/modules/ipvs.modules
文件内容如下(低版本内核把nf_conntrack修改为nf_conntrack_ipv4)
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
赋予权限并执行
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules &&lsmod | grep -e ip_vs -e nf_conntrack
重启电脑,检查是否生效
reboot
lsmod | grep ip_vs_rr
    
    
    
     同步时间
    
   
安装软件
yum -y install ntpdate
向阿里云服务器同步时间
ntpdate time1.aliyun.com
删除本地时间并设置时区为上海
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
查看时间
date -R || date
    
    
    
     命令补全
    
   
安装bash-completion
yum -y install bash-completion bash-completion-extras
使用bash-completion
source /etc/profile.d/bash_completion.sh
    
    
    
     关闭swap分区
    
   
临时关闭:
swapoff -a
永久关闭:
vi /etc/fstab
将文件中的/dev/mapper/centos-swap这行代码注释掉
#/dev/mapper/centos-swap swap swap defaults 0 0
确认swap已经关闭:若swap行都显示 0 则表示关闭成功
free -m
    
    
    
     hosts配置
    
   
vi /etc/hosts
文件内容如下:
192.168.198.156 k8s-master01
192.168.198.157 k8s-node01
192.168.198.158 k8s-node02
192.168.198.159 k8s-node03
    
    
    安装docker
   
    
    
    
     阿里云开发者平台
    
   
开发者平台官网地址:可以参考阿里云官网提供的docker安装教程进行安装。
https://www.aliyun.com/
    
    
    安装docker前置条件
   
yum install -y yum-utils device-mapper-persistent-data lvm2
    
    
    
     添加源
    
   
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
    
    
    
     查看docker更新版本
    
   
yum list docker-ce --showduplicates | sort -r
    
    
    
     安装docker最新版本
    
   
yum -y install docker-ce
安装指定版本:
yum -y install docker-ce-18.09.8
可以通过docker version命令查看
docker-client版本:当前最新版本
docker-server版本为:18.09.8
    
    
    
     开启dock而服务
    
   
systemctl start docker
systemctl status docker
    
     安装阿里云镜像加速器
    
   
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["自己的阿里云镜像加速地址"]
}
EOF
例如:
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://es4orw3p.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
    
    
    设置docker开启启动服务
   
systemctl enable docker
    
    
    
     修改Cgroup Driver
    
   
vi /etc/docker/daemon.json
修改daemon.json,新增:
,"exec-opts": ["native.cgroupdriver=systemd"]
重启docker服务:
systemctl daemon-reload
systemctl restart docker
查看修改后状态:
docker info | grep Cgroup
    修改
    
     cgroupdriver
    
    是为了消除安装
    
     k8s
    
    集群时的告警:
   
[WARNING IsDockerSystemdCheck]:
detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”.
Please follow the guide at https://kubernetes.io/docs/setup/cri/…
    
    
    
     复习docker常用命令
    
   
docker -v
docker version
docker info
    
    
    docker命令分类
   
Docker环境信息 — docker [info|version]
容器生命周期管理 — docker
[create|exec|run|start|stop|restart|kill|rm|pause|unpause]
容器操作管理 — docker [ps|inspect|top|attach|wait|export|port|rename|stat]
容器rootfs命令 — docker [commit|cp|diff]
镜像仓库 — docker [login|pull|push|search]
本地镜像管理 — docker [build|images|rmi|tag|save|import|load]
容器资源管理 — docker [volume|network]
系统日志信息 — docker [events|history|logs]
    
    
    使用kubeadm快速安装
   
| 软 件 | kubeadm | kubelet | kubectl | docker-ce | 
|---|---|---|---|---|
| 版本 | 初始化集群管理集群版本:1.17.5 | 用于接收api-server指令,对pod生命周期进行管理版本:1.17.5 | 集群命令行管理工具 版本:1.17.5 | 推荐使用版本:19.03.8 | 
    
    
    安装yum源
   
    
     新建repo文件
    
   
vi /etc/yum.repos.d/kubernates.repo
    
     文件内容
    
   
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
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
如果repo_gpgcheck设为1,会进行校验,就会报错如下,所以这里设为0
repomd.xml signature could not be verified for kubernetes
    
    
    
     更新缓存
    
   
yum clean all
yum -y makecache
    
     验证源是否可用
    
   
yum list | grep kubeadm
如果提示要验证yum-key.gpg是否可用,输入y。
查找到kubeadm。显示版本
    
     查看k8s版本
    
   
yum list kubelet --showduplicates | sort -r
    
    
    
     安装k8s-1.17.5
    
   
yum install -y kubelet-1.17.5 kubeadm-1.17.5 kubectl-1.17.5
    
    
    设置kubelet
   
    
     增加配置信息
    
   
如果不配置kubelet,可能会导致K8S集群无法启动。为实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性。
vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
    
    
    
     设置开机启动
    
   
systemctl enable kubelet
    
    
    
     初始化镜像
    
   
    
    
    
     查看安装集群需要的镜像
    
   
kubeadm config images list
    
    
    
     编写执行脚本
    
   
mkdir -p /data
cd /data
vi images.sh
#!/bin/bash
# 下面的镜像应该去除"k8s.gcr.io"的前缀,版本换成kubeadm config images list命令获取到的版本
images=(
    kube-apiserver:v1.17.5
    kube-controller-manager:v1.17.5
    kube-scheduler:v1.17.5
    kube-proxy:v1.17.5
    pause:3.1
    etcd:3.4.3-0
    coredns:1.6.5
)
for imageName in ${images[@]} ;
do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
    
    
    
     执行脚本
    
   
给脚本授权
chmod +x images.sh
执行脚本
./images.sh
    
     保存镜像
    
   
docker save -o k8s.1.17.5.tar \
k8s.gcr.io/kube-proxy:v1.17.5 \
k8s.gcr.io/kube-apiserver:v1.17.5 \
k8s.gcr.io/kube-controller-manager:v1.17.5 \
k8s.gcr.io/kube-scheduler:v1.17.5 \
k8s.gcr.io/coredns:1.6.5 \
k8s.gcr.io/etcd:3.4.3-0 \
k8s.gcr.io/pause:3.1
    
     导入镜像
    
   
    
     导入master节点镜像tar包
    
   
master节点需要全部镜像
docker load -i k8s.1.17.5.tar
    
     导入node节点镜像tar包
    
   
node节点需要kube-proxy:v1.17.5和pause:3.1,2个镜像
docker load -i k8s.1.17.5.node.tar
    
    
    
     初始化集群
    
   
    
    
    
     配置k8s集群网络
    
   
    
     calico官网地址
    
   
    官网下载地址:
    
    https://docs.projectcalico.org/v3.14/manifests/calico.yaml
   
    github地址:
    
    https://github.com/projectcalico/calico
   
    
    
    
     下载calico.yaml
    
   
wget https://docs.projectcalico.org/v3.14/manifests/calico.yaml
    
    
    镜像下载
   
docker pull calico/cni:v3.14.2
docker pull calico/pod2daemon-flexvol:v3.14.2
docker pull calico/node:v3.14.2
docker pull calico/kube-controllers:v3.14.2
    
    
    
     克隆并配置其他节点
    
   
配置hostname:
hostnamectl set-hostname k8s-master01
bash
hostnamectl set-hostname k8s-node01
bash
hostnamectl set-hostname k8s-node02
bash
hostnamectl set-hostname k8s-node03
bash
配置ip地址:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
    
    
    初始化集群信息:calico网络
   
kubeadm init --apiserver-advertise-address=192.168.198.156 --kubernetes-version v1.17.5 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.81.0.0/16
    
    
    
     执行配置命令
    
   
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    
    node节点加入集群信息
   
复制初始化后返回的信息
kubeadm join 192.168.198.156:6443 --token kksfgq.b9bhf82y35ufw4np \
--discovery-token-ca-cert-hash sha256:e1e347e6db1db5c13fcdc2c7d51a2f9029100a4cc13c2d89a2dbfa5077f5b07f
    
    
    查看集群节点状态
   
kubectl get nodes
    
    
    执行calico.yaml
   
kubectl apply -f calico.yaml
查看各节点状态变化
kubectl get nodes -w
    
    
    kubectl命令自动补全
   
echo "source <(kubectl completion bash)" >> ~/.bash_profile
source ~/.bash_profile
    
    
    
     发送邮件问题
    
   
在 bash 中设置当前 shell 的自动补全,要先安装 bash-completion 包。
echo "unset MAILCHECK">> /etc/profile
source /etc/profile
在你的 bash shell 中永久的添加自动补全
    
    
    yum-key.gpg验证未通过
   
wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
rpm --import yum-key.gpg
rpm --import rpm-package-key.gpg
    
    
    
     NameSpace
    
   
命名空间。 你可以认为namespaces是你kubernetes集群中的虚拟化集群。在一个Kubernetes集群中可以拥有多个命名空间,它们在逻辑上彼此隔离。 可以为你提供组织,安全甚至性能方面的帮助!
    
    
    
     查看命名空间
    
   
kubectl get namespace
查看所有命名空间的pod资源
kubectl get pod --all-namespaces
kubectl get pod -A
简写命令
kubectl get ns
    
     说明
    
   
default 用户创建的pod默认在此命名空间
kube-public 所有用户均可以访问,包括未认证用户
kube-node-lease kubernetes集群节点租约状态,v1.13加入
kube-system kubernetes集群在使用
    
    
    创建NameSpace
   
kubectl create namespace ns1
简写命令
kubectl create ns ns1
    
    
    删除NameSpace
   
kubectl delete namespace ns1
简写命令
kubectl delete ns ns1
    
    
    
     Pod
    
   
Pod是kubernetes集群能够调度的最小单元。Pod是容器的封装 。
在Kubernetes集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个容器的组合。这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被同一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器
    
    
    
     查看Pod
    
   
查看default命名空间下的pods
kubectl get pods
查看kube-system命名空间下的pods
kubectl get pods -n kube-system
查看所有命名空间下的pods
kubectl get pod --all-namespaces
kubectl get pod -A
    
    
    
     创建Pod
    
   
    
     下载镜像
    
   
K8S集群的每一个节点都需要下载镜像:选择不同的基础镜像,下载镜像的大小也不同。
docker pull tomcat:9.0.20-jre8-alpine
docker pull tomcat:9.0.37-jdk8-openjdk-slim
docker pull tomcat:9.0.37-jdk8
同学们可以自行下载后进行备份。
docker save -o tomcat9.tar tomcat:9.0.20-jre8-alpine
docker load -i tomcat9.tar
    
     运行pod
    
   
在default命名空间中创建一个pod副本的deployment
kubectl run tomcat9-test --image=tomcat:9.0.20-jre8-alpine --port=8080
kubectl get pod
kubectl get pod -o wide
使用pod的IP访问容器
curl ***:8080
    
    
    
     扩容
    
   
将副本扩容至3个
kubectl scale --replicas=3 deployment/tomcat9-test
kubectl get deployment
kubectl get deployment -o wide
使用deployment的IP访问pod
删除deployment
kubectl delete deployment tomcat9-test
    
     创建服务
    
   
kubectl expose deployment tomcat9-test --name=tomcat9-svc --port=8888 --target-port=8080 --protocol=TCP --type=NodePort
查看端口号
kubectl get svc
kubectl get svc -o wide
访问服务端口
curl 10.105.225.0:8888
访问集群外端口
http://192.168.198.156:32500
    
    
    
     kubectl常用命令练习
    
   
    
    
    
     语法规则
    
   
kubectl [command] [TYPE] [NAME] [flags]
    其中
    
     command 、 TYPE 、 NAME 和 flags
    
    分别是:
   
    
     command
    
    :指定要对一个或多个资源执行的操作,例如 create 、 get 、 describe 、 delete 。
   
    
     TYPE
    
    :指定资源类型。资源类型不区分大小写,可以指定单数、复数或缩写形式。例如,以下命令输出相同的结果:
   
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
    
     NAME
    
    :指定资源的名称。名称区分大小写。如果省略名称,则显示所有资源的详细信息 kubectl get pods 。
   
在对多个资源执行操作时,您可以按类型和名称指定每个资源,或指定一个或多个文件:
要按类型和名称指定资源:
 要对所有类型相同的资源进行分组,请执行以下操作: TYPE1 name1 name2 name<#> 。
 例子: kubectl get pod example-pod1 example-pod2
 分别指定多个资源类型: TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#> 。
 例子: kubectl get pod/example-pod1 replicationcontroller/example-rc1
 用一个或多个文件指定资源: -f file1 -f file2 -f file<#>
 使用 YAML 而不是 JSON 因为 YAML 更容易使用,特别是用于配置文件时。
 例子: kubectl get pod -f ./pod.yaml
    
     flags
    
    : 指定可选的参数。例如,可以使用 -s 或 -server 参数指定 Kubernetes API 服务器的地址和端口。
   
    
     注意
    
    :
   
从命令行指定的参数会覆盖默认值和任何相应的环境变量。
    
    
    
     get命令
    
   
kubectl get – 列出一个或多个资源。
# 查看集群状态信息
kubectl cluster-info
# 查看集群状态
kubectl get cs
# 查看集群节点信息
kubectl get nodes
# 查看集群命名空间
kubectl get ns
# 查看指定命名空间的服务
kubectl get svc -n kube-system
# 以纯文本输出格式列出所有 pod。
kubectl get pods
# 以纯文本输出格式列出所有 pod,并包含附加信息(如节点名)。
kubectl get pods -o wide
# 以纯文本输出格式列出具有指定名称的副本控制器。提示:您可以使用别名 'rc' 缩短和替换'replicationcontroller' 资源类型。
kubectl get replicationcontroller <rc-name>
# 以纯文本输出格式列出所有副本控制器和服务。
kubectl get rc,services
# 以纯文本输出格式列出所有守护程序集,包括未初始化的守护程序集。
kubectl get ds --include-uninitialized
# 列出在节点 server01 上运行的所有 pod
kubectl get pods --field-selector=spec.nodeName=server01
    
    
    
     describe命令
    
   
kubectl describe – 显示一个或多个资源的详细状态,默认情况下包括未初始化的资源。
# 显示名称为 <node-name> 的节点的详细信息。
kubectl describe nodes <node-name>
# 显示名为 <pod-name> 的 pod 的详细信息。
kubectl describe pods/<pod-name>
# 显示由名为 <rc-name> 的副本控制器管理的所有 pod 的详细信息。
# 记住:副本控制器创建的任何 pod 都以复制控制器的名称为前缀。
kubectl describe pods <rc-name>
# 描述所有的 pod,不包括未初始化的 pod
kubectl describe pods --include-uninitialized=false
    
     说明
    
    : kubectl get 命令通常用于检索同一资源类型的一个或多个资源。 它具有丰富的参数,允许您使用 -o 或 –output 参数自定义输出格式。您可以指定 -w 或 –watch 参数以开始观察特定对象的更新。 kubectl describe 命令更侧重于描述指定资源的许多相关方面。它可以调用对 API 服务器 的多个 API 调用来为用户构建视图。 例如,该 kubectl describe node 命令不仅检索有关节点的信息,还检索在其上运行的 pod 的摘要,为节点生成的事件等。
   
    
    
    
     delete命令
    
   
kubectl delete` – 从文件、stdin 或指定标签选择器、名称、资源选择器或资源中删除资源。
# 使用 pod.yaml 文件中指定的类型和名称删除 pod。
kubectl delete -f pod.yaml
# 删除标签名= <label-name> 的所有 pod 和服务。
kubectl delete pods,services -l name=<label-name>
# 删除所有具有标签名称= <label-name> 的 pod 和服务,包括未初始化的那些。
kubectl delete pods,services -l name=<label-name> --include-uninitialized
# 删除所有 pod,包括未初始化的 pod。
kubectl delete pods --all
    
     进入容器命令
    
   
kubectl exec – 对 pod 中的容器执行命令。与docker的exec命令非常类似
# 从 pod <pod-name> 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。
kubectl exec <pod-name> date
# 运行输出 'date' 获取在容器的 <container-name> 中 pod <pod-name> 的输出。
kubectl exec <pod-name> -c <container-name> date
# 获取一个交互 TTY 并运行 /bin/bash <pod-name >。默认情况下,输出来自第一个容器。
kubectl exec -ti <pod-name> /bin/bash
    
    
    
     logs命令
    
   
kubectl logs – 打印 Pod 中容器的日志。
# 从 pod 返回日志快照。
kubectl logs <pod-name>
# 从 pod <pod-name> 开始流式传输日志。这类似于 'tail -f' Linux 命令。
kubectl logs -f <pod-name>
    
    
    
     格式化输出
    
   
将pod信息格式化输出到一个yaml文件
kubectl get pod web-pod-13je7 -o yaml
    
    
    
     强制删除pod
    
   
强制删除一个pod
--force --grace-period=0
    
    
    
     资源缩写
    
   
    
    
    
     缩写汇总
    
   
| 资源名 | 缩写名 | API分组 | 按命名空间 | 资源类型 | 
|---|---|---|---|---|
| confifigmaps | cm | – | true | ConfifigMap | 
| namespaces | ns | false | Namespace | |
| nodes | no | false | Node | |
| persistentvolumeclaims | pvc | true | PersistentVolumeClaim | |
| persistentvolumes | pv | false | PersistentVolume | |
| pods | po | true | Pod | |
| secrets | true | Secret | ||
| serviceaccounts | sa | true | ServiceAccount | |
| services | svc | true | Service | |
| daemonsets | ds | apps | true | DaemonSet | 
| deployments | deploy | apps | true | Deployment | 
| statefulsets | sts | apps | true | StatefulSet | 
| horizontalpodautoscalers | hpa | autoscaling | true | HorizontalPodAutoscaler | 
| cronjobs | cj | batch | true | CronJob | 
| jobs | batch | true | Job | |
| ingresses | ing | extensions | true | Ingress | 
| poddisruptionbudgets | pdb | policy | true | PodDisruptionBudget | 
| clusterrolebindings | rbac.authorization.k8s.io | false | ClusterRoleBinding | |
| clusterroles | rbac.authorization.k8s.io | false | ClusterRole | |
| rolebindings | rbac.authorization.k8s.io | true | RoleBinding | |
| roles | rbac.authorization.k8s.io | true | Role | |
| storageclasses | sc | storage.k8s.io | false | StorageClass | 
    
    
    idea安装k8s插件
   
    
    
    idea插件官网地址
   
https://plugins.jetbrains.com/
    
     kubernetes地址:
    
   
https://plugins.jetbrains.com/plugin/10485-kubernetes
    
    
    查找对应自己idea版本的k8s插件信息
   
help->about->查看idea内部版本信息 一定要注意版本信息,否则无法安装
    
    
    离线安装k8s插件
   
因国外网站网速较慢,在线安装有安装失败的危险。推荐大家下载idea对应版本的插件后,进行离线安装
193.5662.65
settings->plugins->Install Plugin from Disk->插件安装目录
安装完成后重启idea开发工具
    
    
    idea配置SSH客户端
   
目标:在idea中打开终端操作k8s集群master节点。
    
    
    idea配置
   
settings->Tools->SSH Configurations->新建
    
    
    使用SSH客户端
   
Tools->Start SSH session->选择我们刚刚配置的ssh客户端名称
    
    
    新建yml类型文件
   
idea默认没有yml文件类型。可以通过new->fifile->手工输入*.yml创建yml类型文件。也可以通过配置增加yml类型文件。
settings->Edtior->File and Code Template->file->+(新建)
    
    
    
     Remote Host
    
   
目标:将idea工程中的文件上传k8s集群master节点。
    
    
    idea配置
   
Tools->Deployment->Configurations->配置Remote Host
    
    
    使用Remote Host
   
可以将本工程中的文件上传k8s集群
    
    
    
     idea配置NameSpace
    
   
    
    
    
     创建NameSpace
    
   
操作指南:
settings->Editor->Live Template->Kubernetes->查看自动生成的模板信息内容
    
    
    
     namespace.yml
    
   
在文件中输入kres,根据模板快速生成yml文件信息
apiVersion: v1
kind: Namespace
metadata:
  name: ns1
通过idea的Remote Host快速将yml文件上传k8s集群进行测试
mkdir -p /data/namespaces
cd /data/namespaces
kubectl apply -f namespace.yml
    
    
    
     删除NameSpace
    
   
kubectl delete -f namespace.yml
    
    
    
     idea配置pod
    
   
    
    
    
     创建pod
    
   
在idea工程resource/pod/tomcatpod.yml
apiVersion: v1
kind: Pod
metadata:
  name: tomcat9
  labels:
    app: tomcat9
spec:
  containers:
    - name: tomcat9
      image: tomcat:9.0.20-jre8-alpine
      imagePullPolicy: IfNotPresent
  restartPolicy: Always
    
     镜像下载策略、重启策略
    
   
imagePullPolicy:
	Always:总是拉取 pull
	IfNotPresent:如果本地有镜像,使用本地,如果本地没有镜像,下载镜像。
	Never:只使用本地镜像,从不拉取
restartPolicy:
	Always:只要退出就重启。
	OnFailure:失败退出时(exit code不为0)才重启
	Never:永远不重启
    
    
    
     运行pod
    
   
kubectl apply -f tomcatpod.yml
    
    
    
     测试pod
    
   
curl 10.81.58.196:8080
    
     删除pod
    
   
kubectl delete -f tomcatpod.yml
    
    
    
     idea配置deployment
    
   
    
    
    
     创建deployment
    
   
在idea工程resource/deployment/tomcatdeployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  labels:
    app: tomcat-deployment
spec:
  replicas: 3
  template:
    metadata:
      name: tomcat-deployment
      labels:
        app: tomcat
      spec:
        containers:
          - name: tomcat-deployment
            image: tomcat:9.0.20-jre8-alpine
            imagePullPolicy: IfNotPresent
        restartPolicy: Always
  selector:
    matchLabels:
      app: tomcat
matchLabels
总结:
在Deployment中必须写matchLables
在定义模板的时候必须定义labels,因为Deployment.spec.selector是必须字段,而他又必须和template.labels对应
    
    
    
     运行deployment
    
   
kubectl apply -f tomcatdeployment.yml
    
    
    
     控制器类型
    
   
| 控制器名称 | 作用 | 
|---|---|
| Deployment | 声明式更新控制器,用于发布无状态应用 | 
| ReplicaSet | 副本集控制器,用于对Pod进行副本规模 扩大或剪裁 | 
| StatefulSet | 有状态副本集,用于发布有状态应用 | 
| DaemonSet | 在k8s集群每一个Node上运行一个副本, 用于发布监控或日志收集类等应用 | 
| Job | 运行一次性作业任务 | 
| CronJob | 运行周期性作业任务 | 
    
    
    
     Deployment控制器介绍
    
   
具有上线部署、滚动升级、创建副本、回滚到以前某一版本(成功/ 稳定)等功能。
Deployment包含ReplicaSet,除非需要自定义升级功能或者根本不需要升级Pod,否则还是建议使用Deployment而不直接使用ReplicaSet 。
    
    
    
     删除Deployment
    
   
kubectl delete -f tomcatdeployment.yml
    
    
    
     idea配置service
    
   
    
    
    
     创建service
    
   
在idea工程resource/service/tomcatservice.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deploy
  labels:
    app: tomcat-deploy
spec:
  replicas: 1
  template:
    metadata:
      name: tomcat-deploy
      labels:
        app: tomcat-pod
    spec:
      containers:
        - name: tomcat-deploy
          image: tomcat:9.0.20-jre8-alpine
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
      restartPolicy: Always
  selector:
    matchLabels:
      app: tomcat-pod
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-svc
spec:
  selector:
    app: tomcat-pod
  ports:
    - port: 8888
      targetPort: 8080
      nodePort: 30088
      protocol: TCP
  type: NodePort
    
     service的selector
    
   
请各位小伙伴注意:
service.spec.selector.app选择的内容仍然是template.label.app内容。而不是我们deployment控制器的label内容
    
     Service类型
    
   
ClusterIP:默认,分配一个集群内部可以访问的虚拟IP
NodePort:在每个Node上分配一个端口作为外部访问入口
LoadBalancer:工作在特定的Cloud Provider上,例如Google Cloud,AWS,OpenStack
ExternalName:表示把集群外部的服务引入到集群内部中来,即实现了集群内部pod和集群外部的服务进行通信
    
     Service参数
    
   
port :访问service使用的端口
targetPort :Pod中容器端口
NodePort: 通过Node实现外网用户访问k8s集群内service(30000-32767)
    
    
    
     运行service
    
   
kubectl apply -f tomcatservice.yml
    
    
    
     删除service
    
   
kubectl delete -f tomcatservice.yml
 
