300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Docker Kubernetes k8s 从入门到精通 阿里云实战命令

Docker Kubernetes k8s 从入门到精通 阿里云实战命令

时间:2018-11-16 21:27:02

相关推荐

Docker Kubernetes k8s 从入门到精通 阿里云实战命令

1. 部署单控制平面集群

文章目录

**1. 部署单控制平面集群****1. 1 基础环境准备****1.1.1 硬件准备****1.1.2 系统环境配置****1.1.3 Docker环境准备****1.1.4 kubeadm环境准备****1.2 创建单控制平面集群****1.2.1 初始化集群****1.2.2 kubectl配置文件****1.2.3 kubectl参数自动补全****1.2.4 Kubernetes网络****1.2.5 Nodes资源管理****1.2.5.1 添加Node节点****1.2.5.2 删除Node节点****1.3 验证****2. Nodes资源管理****2.1 查看资源的简略信息****2.2 查看资源的扩展信息****2.3 查看资源的详细信息****2.4 查看资源的yaml文件格式****2.5 查看资源的json文件格式****3. Label与Annotation****3.1 Label****3.2 Annotation****4-5. Kubernetes API、Resources与Namespaces****4. Kubernetes API与Resources****4.1 api-resources****4.2 api-versions****5. Namespaces****5.1 查看当前集群下的namespace****5.2 Namespaces的创建与删除****6. 工作负载之pods****6.1 创建Pod****6.2 设置pod的资源请求与限制****6.3 登陆容器操作****6.4 apply、edit与patch的使用****6.5 Init Containers****6.6 static Pods**

1. 1 基础环境准备

1.1.1 硬件准备

机器配置:2核CPU,4G内存,40G系统盘

系统:Ubuntu 16.04.6 LTS

机器数量:3台 (master01 node01 node02)

1.1.2 系统环境配置

修改配置静态hostname

hostnamectl set-hostname node01 --static

hostnamectl set-hostname node02 --static

hostnamectl set-hostname master01 --static

修改hosts表,集群所有节点保持文件内容一致

#Kubernetes172.31.53.87 master01172.31.53.88 node01172.31.53.86 node02

配置服务器时间统一

关闭firewalld

ufw disable

关闭SELinux

ubuntu默认关闭SELinux

关闭swap

# 临时关闭swapoff -a# 永久关闭注释掉/etc/fstab下的swap一行

开启参数自动补全,取消bash-completion注释

vim /etc/bash.bashrc# enable bash completion in interactive shellsif ! shopt -oq posix; thenif [ -f /usr/share/bash-completion/bash_completion ]; then. /usr/share/bash-completion/bash_completionelif [ -f /etc/bash_completion ]; then. /etc/bash_completionfifisource /etc/bash.bashrc

1.1.3 Docker环境准备

更新apt包索引

apt-get update

安装软件包以允许apt通过HTTPS使用存储库

apt-get -y install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common

添加Docker的官方GPG密钥

curl -fsSL /linux/ubuntu/gpg | sudo apt-key add -

安装add-apt-repository工具

apt-get -y install software-properties-common

添加稳定的存储库

add-apt-repository \"deb [arch=amd64] /linux/ubuntu \$(lsb_release -cs) \stable"

更新apt包索引

apt-get update

查看Docker版本

apt-cache madison docker-ce

安装docker-ce最新版本

apt-get -y install docker-ce docker-ce-cli containerd.iodocker info

解决问题:WARNING: No swap limit support(操作系统下docker不支持内存限制的警告),基于RPM的系统上不会发生此警告,该系统默认情况下启用这些功能。解决方法:vim /etc/default/grub 添加或编辑GRUB_CMDLINE_LINUX行以添加这两个键值对"cgroup_enable=memory swapaccount=1",例子:

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1 net.ifnames=0 vga=792 console=tty0 console=ttyS0,115200n8 noibrs"

执行命令更新grub并重启机器

update-grub && reboot

docker 在 1.13 版本之后,将系统iptables 中 FORWARD 链的默认策略设置为 DROP,并为连接到 docker0 网桥的容器添加了ACCEPT规则,临时解决办法:

iptables -P FORWARD ACCEPT

永久解决办法:

vim /lib/systemd/system/docker.service# 在[Service]下添加:ExecStartPost=/sbin/iptables -P FORWARD ACCEPTsystemctl daemon-reload && systemctl restart docker.service

设置daemon.json

cat > /etc/docker/daemon.json <<EOF{"registry-mirrors": ["https://ezdhou8v."],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"}EOFsystemctl daemon-reload && systemctl restart docker.service

1.1.4 kubeadm环境准备

配置apt库,安装kubeadm、kubelet、kubectl

apt-get update && apt-get install -y apt-transport-httpscurl /kubernetes/apt/doc/apt-key.gpg | apt-key add - cat <<EOF >/etc/apt/sources.list.d/kubernetes.listdeb /kubernetes/apt/ kubernetes-xenial mainEOFapt-get updateapt-get install -y kubelet kubeadm kubectl

开启这些设置使通过网桥的数据包由主机系统上的iptables规则处理,默认关闭,设置为1则开启

cat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsudo sysctl --system

1.2 创建单控制平面集群

1.2.1 初始化集群

命令详解

kubeadm config upload from-file:由配置文件上传到集群中生成ConfigMap;

kubeadm config upload from-flags:由配置参数生成ConfigMap;

kubeadm config view:查看当前集群中的配置值;

kubeadm config print init-defaults:输出kubeadm init默认参数文件的内容;

kubeadm config print join-defaults:输出kubeadm join默认参数文件的内容;

kubeadm config migrate:在新旧版本之间进行配置转换;

kubeadm config images list:列出所需的镜像列表;

kubeadm config images pull:拉取镜像到本地;

配置kubeadm的参数自动补全

# 查看completion帮助kubeadm completion -h# 配置自动补全source <(kubeadm completion bash)echo "source <(kubeadm completion bash)" >> ~/.bashrcsource ~/.bashrc

生成配置文件

kubeadm config print init-defaults > init-defaults.yamlvim init-defaults.yaml修改:clusterName: Cluster01advertiseAddress: 172.24.51.176imageRepository: /google_containers

执行初始化操作

kubeadm init --config init-defaults.yaml

或者

kubeadm init --apiserver-advertise-address=172.24.205.51 --image-repository=/google_containers# 执行完初始化保存最后输出的结果到文件:管理用户配置、部署网络、添加节点相关信息.如果在初始化集群的时候出现报错,请执行 kubeadm reset 命令执行重置,解决提示的报错后在执行初始化操作。

1.2.2 kubectl配置文件

root用户

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /root/.bashrcsource /root/.bashrc

非root用户

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

1.2.3 kubectl参数自动补全

查看completion帮助

kubectl completion -h

kubectl自动补全添加到当前shell

source <(kubectl completion bash)echo "source <(kubectl completion bash)" >> ~/.bashrcsource ~/.bashrc

1.2.4 Kubernetes网络

kubectl apply -f /v3.22/manifests/calico.yaml# 指定网卡名称kubectl -n kube-system edit daemonsets.apps calico-nodespec:containers:- env:- name: IP_AUTODETECTION_METHOD # 添加该环境变量value: interface=eth0 # 指定内网网卡名称,按事实情况修改

1.2.5 Nodes资源管理

1.2.5.1 添加Node节点

# 创建token (Master01节点执行)kubeadm token create# 永久tokenkubeadm token create --ttl 0# 查看token (Master01节点执行)kubeadm token list# 获取discovery-token-ca-cert-hash值(Master01节点执行)openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \openssl dgst -sha256 -hex | sed 's/^.* //'# 添加work节点到kubernetes集群(work node节点执行)kubeadm join <api-server-ip:port> --token <toke> --discovery-token-ca-cert-hash sha256:<discovery-token-ca-cert-hash>

kubeadm token create --print-join-command # 自动生成以下命令,直接加入节点kubeadm join 172.21.184.81:6443 --token jde7q3.bv4ehxnyxfe04m56--discovery-token-ca-cert-hash sha256:cde3bc85a4fbc5bdb0e78a532d0fa0fbc301485f7d86806c06ea59f6f9610032

1.2.5.2 删除Node节点

# 删除节点kubectl delete nodes <node_name># 删除/etc/kubernetes目录rm -rf /etc/kubernetes/# ssh到<node_name>执行清理残留操作kubeadm reset# 清理Iptablesiptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X或者# 清理IPVSipvsadm -C

1.3 验证

# 检查组件状态是否正常kubectl get componentstatuses # 查看集群系统信息kubectl cluster-info# 查看核心组件是否运行正常(Running)kubectl -n kube-system get pod# 每次重启之后,删除非Up状态的容器docker ps -a | grep -v Up | xargs docker rm -f

文章目录

**1. 部署单控制平面集群****1. 1 基础环境准备****1.1.1 硬件准备****1.1.2 系统环境配置****1.1.3 Docker环境准备****1.1.4 kubeadm环境准备****1.2 创建单控制平面集群****1.2.1 初始化集群****1.2.2 kubectl配置文件****1.2.3 kubectl参数自动补全****1.2.4 Kubernetes网络****1.2.5 Nodes资源管理****1.2.5.1 添加Node节点****1.2.5.2 删除Node节点****1.3 验证****2. Nodes资源管理****2.1 查看资源的简略信息****2.2 查看资源的扩展信息****2.3 查看资源的详细信息****2.4 查看资源的yaml文件格式****2.5 查看资源的json文件格式****3. Label与Annotation****3.1 Label****3.2 Annotation****4-5. Kubernetes API、Resources与Namespaces****4. Kubernetes API与Resources****4.1 api-resources****4.2 api-versions****5. Namespaces****5.1 查看当前集群下的namespace****5.2 Namespaces的创建与删除****6. 工作负载之pods****6.1 创建Pod****6.2 设置pod的资源请求与限制****6.3 登陆容器操作****6.4 apply、edit与patch的使用****6.5 Init Containers****6.6 static Pods**

2. Nodes资源管理

2.1 查看资源的简略信息

kubectl get nodes# 解析:NAME:node的名称STATUS:node的状态ROLES: node的角色AGE:node的生命周期VERSION:kubernetes版本

2.2 查看资源的扩展信息

kubectl get nodes -o wide# 解析:INTERNAL-IP::内部IPEXTERNAL-IP:外部IPOS-IMAGE:系统版本KERNEL-VERSION;系统内核版本CONTAINER-RUNTIME:container runtime的版本

2.3 查看资源的详细信息

kubectl describe nodes master01 # 解析:capacity:描述节点上的总资源:CPU、内存和可以调度到节点上的最pod数量;allocatable: 描述可分配的资源;conditions: MemoryPressure:status: True节点内存存在压力或者不足status: False节点内存正常无压力DiskPressure:status: True磁盘容量存在压力或者容量低status: False磁盘容量正常无压力PIDPressure:status: True 进程上存在压力或者进程过多status: False进程正常无压力Ready:status: True 节点是健康正常status: False节点不健康OutOfDisk:status: True 如果节点上没有足够的空闲空间来添加新的podstatus: False节点上有空闲的空间NetworkUnavailable:status: True 节点的网络配置不正确status: False节点的网络配置正确

2.4 查看资源的yaml文件格式

kubectl get nodes master01 -o yaml

2.5 查看资源的json文件格式

kubectl get nodes master01 -o json

文章目录

**1. 部署单控制平面集群****1. 1 基础环境准备****1.1.1 硬件准备****1.1.2 系统环境配置****1.1.3 Docker环境准备****1.1.4 kubeadm环境准备****1.2 创建单控制平面集群****1.2.1 初始化集群****1.2.2 kubectl配置文件****1.2.3 kubectl参数自动补全****1.2.4 Kubernetes网络****1.2.5 Nodes资源管理****1.2.5.1 添加Node节点****1.2.5.2 删除Node节点****1.3 验证****2. Nodes资源管理****2.1 查看资源的简略信息****2.2 查看资源的扩展信息****2.3 查看资源的详细信息****2.4 查看资源的yaml文件格式****2.5 查看资源的json文件格式****3. Label与Annotation****3.1 Label****3.2 Annotation****4-5. Kubernetes API、Resources与Namespaces****4. Kubernetes API与Resources****4.1 api-resources****4.2 api-versions****5. Namespaces****5.1 查看当前集群下的namespace****5.2 Namespaces的创建与删除****6. 工作负载之pods****6.1 创建Pod****6.2 设置pod的资源请求与限制****6.3 登陆容器操作****6.4 apply、edit与patch的使用****6.5 Init Containers****6.6 static Pods**

3. Label与Annotation

3.1 Label

查看资源的标签信息

kubectl get nodes --show-labels或者kubectl describe nodes node01

Label的添加与删除,Key必须存在且唯一,Value可以为空、且不唯一

# 添加Labelkubectl label nodes node01 node-role.kubernetes.io/work=# 删除Labelkubectl label nodes node01 node-role.kubernetes.io/work-

查看node的角色

kubectl get nodes

3.2 Annotation

查看Annotation

kubectl describe resource_type resource_name

Annotation的添加与删除,#Key必须存在且唯一,Value可以为空、且不唯一

添加Annotationkubectl annotate resource_type resource_name key=value# 删除Annotationkubectl annotate resource_type resource_name key-

文章目录

**1. 部署单控制平面集群****1. 1 基础环境准备****1.1.1 硬件准备****1.1.2 系统环境配置****1.1.3 Docker环境准备****1.1.4 kubeadm环境准备****1.2 创建单控制平面集群****1.2.1 初始化集群****1.2.2 kubectl配置文件****1.2.3 kubectl参数自动补全****1.2.4 Kubernetes网络****1.2.5 Nodes资源管理****1.2.5.1 添加Node节点****1.2.5.2 删除Node节点****1.3 验证****2. Nodes资源管理****2.1 查看资源的简略信息****2.2 查看资源的扩展信息****2.3 查看资源的详细信息****2.4 查看资源的yaml文件格式****2.5 查看资源的json文件格式****3. Label与Annotation****3.1 Label****3.2 Annotation****4-5. Kubernetes API、Resources与Namespaces****4. Kubernetes API与Resources****4.1 api-resources****4.2 api-versions****5. Namespaces****5.1 查看当前集群下的namespace****5.2 Namespaces的创建与删除****6. 工作负载之pods****6.1 创建Pod****6.2 设置pod的资源请求与限制****6.3 登陆容器操作****6.4 apply、edit与patch的使用****6.5 Init Containers****6.6 static Pods**

4-5. Kubernetes API、Resources与Namespaces

4. Kubernetes API与Resources

4.1 api-resources

查看Kubernetes的资源

kubectl api-resources

4.2 api-versions

查看Kubernetes api-version

kubectl api-versions

5. Namespaces

5.1 查看当前集群下的namespace

kubectl get namespaces

5.2 Namespaces的创建与删除

# 创建kubectl create namespace test# 删除kubectl delete namespaces demo # yaml创建cat << EOF > my-namespace.yamlapiVersion: v1kind: Namespacemetadata:name: demoEOF# 执行yaml文件创建namespaceskubectl apply -f ./my-namespace.yaml# 通过yaml文件删除namespaceskubectl delete -f my-namespace.yaml

文章目录

**1. 部署单控制平面集群****1. 1 基础环境准备****1.1.1 硬件准备****1.1.2 系统环境配置****1.1.3 Docker环境准备****1.1.4 kubeadm环境准备****1.2 创建单控制平面集群****1.2.1 初始化集群****1.2.2 kubectl配置文件****1.2.3 kubectl参数自动补全****1.2.4 Kubernetes网络****1.2.5 Nodes资源管理****1.2.5.1 添加Node节点****1.2.5.2 删除Node节点****1.3 验证****2. Nodes资源管理****2.1 查看资源的简略信息****2.2 查看资源的扩展信息****2.3 查看资源的详细信息****2.4 查看资源的yaml文件格式****2.5 查看资源的json文件格式****3. Label与Annotation****3.1 Label****3.2 Annotation****4-5. Kubernetes API、Resources与Namespaces****4. Kubernetes API与Resources****4.1 api-resources****4.2 api-versions****5. Namespaces****5.1 查看当前集群下的namespace****5.2 Namespaces的创建与删除****6. 工作负载之pods****6.1 创建Pod****6.2 设置pod的资源请求与限制****6.3 登陆容器操作****6.4 apply、edit与patch的使用****6.5 Init Containers****6.6 static Pods**

6. 工作负载之pods

6.1 创建Pod

命令行创建Pod

kubectl run --image=nginx test

查看Pod

kubectl get pod

Yaml文件创建 – 指定Namespace

apiVersion: v1kind: Namespacemetadata:name: nginx-example---apiVersion: v1kind: Podmetadata:name: nginx-pod01namespace: nginx-examplespec:containers:- name: pod-nginximage: nginximagePullPolicy: IfNotPresent

Pods相关介绍

查看pod的状态kubectl get podsNAMESPACE:所属namespaceNAME: Pod名字READY: Pod 是否为READYSTATUS: Pod状态RESTARTS:容器的重启次数AGE:生命周期imagePullPolicy:Always:每次都下载镜像(默认);Never:只使用本地镜像,从不下载;IfNotPresent:只有当本地没有的时候才下载镜像;restartPolicy:Always:除了Running状态都重启容器;OnFailure:失败状态才重启容器;Never:无论失败或者完成状态都不重启容器;

创建multiple-containers.yaml

apiVersion: v1kind: Podmetadata:name: nginx-pod01spec:containers:- name: pod-nginximage: nginx- name: pod-tomcatimage: tomcat

6.2 设置pod的资源请求与限制

创建memory-request-limit.yaml

apiVersion: v1kind: Podmetadata:name: memory-demospec:containers:- name: memory-demo-ctrimage: polinux/stressresources:limits:memory: "200Mi"requests:memory: "100Mi"command: ["stress"]args: ["--vm", "1", "--vm-bytes", "250M", "--vm-hang", "1"]

创建cpu-request-limit.yaml

apiVersion: v1kind: Podmetadata:name: cpu-demospec:containers:- name: cpu-demo-ctrimage: vish/stressresources:limits:cpu: "1"requests:cpu: "0.5"args:- -cpus- "2"

6.3 登陆容器操作

# pod封装一个容器kubectl exec -it memory-demo bashkubectl exec -it memory-demo -- ls /sbin# pod封装多个容器kubectl exec -it -c memory-demo-ctr-2 memory-demo bashkubectl exec -it -c memory-demo-ctr-2 memory-demo -- ls /root

6.4 apply、edit与patch的使用

# apply的使用kubectl apply -f# edit的使用kubectl edit <TYPE> <NAME># patch的使用kubectl get <TYPE> <NAME> -o jsonkubectl patch <TYPE> <NAME> -p '{"metadata": {"labels": {"app": "damon"}}}'

6.5 Init Containers

创建init-pod.yaml

apiVersion: v1kind: Podmetadata:name: myapp-podlabels:app: myappspec:containers:- name: myapp01image: busybox:1.28imagePullPolicy: IfNotPresentcommand: ['sh', '-c', 'echo The myapp is running! && sleep 3600']- name: myapp02image: busybox:1.28imagePullPolicy: IfNotPresentcommand: ['sh', '-c', 'echo The app is running! && sleep 3600']initContainers:- name: init01image: busybox:1.28imagePullPolicy: IfNotPresentcommand: ['sh', '-c', 'echo The app is complete! && sleep 10']- name: init02image: busybox:1.28imagePullPolicy: IfNotPresentcommand: ['sh', '-c', 'echo The init02 is complete! && sleep 10']

6.6 static Pods

kubeadm部署kubernetes集群的Static Pod的存放路径默认为:/etc/kubernetes/manifests/

修改Static Pod存放路径:

方法一:修改/var/lib/kubelet/config.yaml修改staticPodPath: /etc/kubernetes/manifests方法二:修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf在KUBELET_CONFIG_ARGS后添加参数:--pod-manifest-path=<绝对路径>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。