Kubernetes
1、集群搭建(kubeadm)
1.1、环境准备
# 关闭防火墙systemctl stop firewalldsystemctl disable firewalld# 关闭selinuxsed -i 's/enforcing/disabled/' /etc/selinux/config # 永久setenforce 0 # 临时# 关闭swapswapoff -a # 临时sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久# 根据规划设置主机名hostnamectl set-hostname <hostname># 在 Master 添加 hostscat >> /etc/hosts << EOF192.168.0.181 k8smaster192.168.0.182 k8snode1192.168.0.183 k8snode2EOF# 将桥接的IPv4流量传递到iptables的链cat > /etc/sysctl.d/k8s.conf << EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsysctl --system # 生效# 时间同步yum install ntpdate -yntpdate time.windows.com# 东八区cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
1.2、安装
###### 所有节点安装Docker/kubeadm/kubelet### 安装docker.....## 添加阿里云YUM软件源cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF### 安装kubeadm,kubelet和kubectlyum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetessystemctl enable kubelet### 部署 Kubernetes Masterkubeadm init \--apiserver-advertise-address=192.168.0.181 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.20.9 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16

## 使用kubectl工具:上图框中mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config## 查看节点kubectl get nodes## node节点执行### 加入Kubernetes Node,上图下面的框中kubeadm join xxx --token xxx \--discovery-token-ca-cert-hash sha256:xxx## 默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建tokenkubeadm token create --print-join-command### 部署CNI网络插件kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml## 查看插件kubectl get pods -n kube-system### 测试 kubernetes 集群kubectl create deployment nginx --image=nginxkubectl expose deployment nginx --port=80 --type=NodePortkubectl get pod,svc## 访问: nodeIP:port (http://192.168.0.182:32474)
2、Kubectl
格式:kubectl [command] [type] [name] [falgs]
- command:指定要对资源执行的操作,例如create、get、describe 和delete
- type:指定资源类型,资源类型是大小写敏感的,开发者能够以单数、复数和缩略的形式
- name:指定资源的名称,名称也大小写敏感的。如果省略名称,则会显示所有的资源
- flags:指定可选的参数。例如,可用-s 或者–server 参数指定Kubernetes API server 的地址和端口。
kubectl get podkubectl get nodeskubectl --help
生成 yaml 文件
# 使用 kubectl create 生成kubectl create deployment web --image=nginx -o yaml --dry-run > my.yaml# 使用 kubectl get 导出已有的kubectl get deploy nginx -o=yaml > my2.yaml
3、Pod
apiVersion: v1kind: Podmetadata: //元数据name: stringnamespace: stringlabels:name: stringannotations:-name: stringspec:containers: //pod 中的容器列表,可以有多个容器- name: string //容器的名称image: string //容器中的镜像imagesPullPolicy: [Always|Never|IfNotPresent]//获取镜像的策略,默认值为 Always,每次都尝试重新下载镜像command: [string] //容器的启动命令列表(不配置的话使用镜像内部的命令) args:[string] //启动参数列表workingDir: string //容器的工作目录volumeMounts: //挂载到到容器内部的存储卷设置-name: stringmountPath: string //存储卷在容器内部Mount 的绝对路径readOnly: boolean //默认值为读写ports: //容器需要暴露的端口号列表-name: stringcontainerPort: int //容器要暴露的端口hostPort: int //容器所在主机监听的端口(容器暴露端口映射到宿主机的端口,设置hostPort 时同一台宿主机将不能再启动该容器的第2 份副本)protocol: string //TCP 和UDP,默认值为TCP env: //容器运行前要设置的环境列表-name: string value: stringresources:limits: //资源限制,容器的最大可用资源数量cpu: Srtingmemory: stringrequeste: //资源限制,容器启动的初始可用资源数量cpu: stringmemory: stringlivenessProbe: //pod 内容器健康检查的设置exec:command: [string] //exec 方式需要指定的命令或脚本httpGet: //通过httpget 检查健康path: string port: number host: string scheme: Srtring httpHeaders:- name: Stirng value: stringtcpSocket: //通过tcpSocket 检查健康port: number initialDelaySeconds: 0//首次检查时间timeoutSeconds: 0 //检查超时时间periodSeconds: 0 //检查间隔时间successThreshold: 0failureThreshold: 0 securityContext: //安全配置privileged: falaerestartPolicy: [Always|Never|OnFailure]//重启策略,默认值为AlwaysnodeSelector: object //节点选择,表示将该Pod 调度到包含这些label 的Node 上,以key:value 格式指定imagePullSecrets:-name: stringhostNetwork: false //是否使用主机网络模式,弃用Docker 网桥,默认否volumes: //在该pod 上定义共享存储卷列表-name: string emptyDir: {} hostPath:path: string secret:secretName: string item:-key: string path: stringconfigMap: name: string items:-key: stringpath: string
