开发环境配置

kubectl 阅读更多

安装 # 直接下载最新版二进制文件 curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl # 下载指版本 curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.17.0/bin/linux/amd64/kubectl # kubectl赋予执行权限 chmod +x ./kubectl # 将二进制文件移动的PATH中 sudo mv ./kubectl /usr/local/bin/kubectl # 测试一下 kubectl version --client --------- # 通过包管理工具下载 sudo apt-get update && sudo apt-get install -y apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubectl --------- # 通过snap商店下载 snap install kubectl --classic 配置 为了让kubectl查找和访问Kubernetes集群,它需要一个kubeconfig文件,该文件在您使用kube-up.sh创建集群或成功部署Minikube集群时会自动创建。默认情况下,kubectl配置位于~/.kube/config。 # 通过获取集群状态来检查kubectl是否已正确配置 kubectl cluster-info # 如果看到URL响应,则表明kubectl已正确配置为访问集群 # 如果您看到类似以下的消息,则说明kubectl配置不正确或无法连接到Kubernetes集群 The connection to the server <server-name:port> was refused - did you specify the right host or port? # 如果kubectl cluster-info返回了url响应,但无法访问集群,要检查其配置是否正确,请使用 kubectl cluster-info dump Bash的kubectl完成脚本可以使用命令kubectl completion bash生成。在shell中输入完成脚本可启用kubectl自动补全功能。但是,完成脚本取决于bash-completion,这意味着必须先安装此软件(可以通过运行type _init_completion来测试是否已安装bash-completion)。 使用apt-get install bash-completion或者yum install bash-completion来安装bash-completion。上面的命令创建/usr/share/bash-completion/bash_completion,这是bash-completion的主要脚本。根据软件包管理器的不同,需要手动source ~/.bashrc。 重新加载shell并运行type _init_completion,如果命令成功,则表示已经安装成功,否则将source /usr/share/bash-completion/bash_completion内容添加到~/.bashrc中。 # 启动命令补全 # 将补全脚本添加到.bashrc echo 'source <(kubectl completion bash)' >>~/.bashrc # 将补全脚本添加到/etc/bash_completion.d目录 kubectl completion bash >/etc/bash_completion.d/kubectl # 如果对kubectl有别名,则可以扩展shell补全功能以使用该别名 echo 'alias k=kubectl' >>~/.bashrc echo 'complete -F __start_kubectl k' >>~/.bashrc 手动创建 kubeconfig kubeconfig 由 kube-up 生成,但是,也可以使用下面命令生成自己想要的配置(可以使用任何想要的子集) # create kubeconfig entry kubectl config set-cluster $CLUSTER_NICK \ --server=https://1.1.1.1 \ --certificate-authority=/path/to/apiserver/ca_file \ --embed-certs=true \ # Or if tls not needed, replace --certificate-authority and --embed-certs with --insecure-skip-tls-verify=true \ --kubeconfig=/path/to/standalone/.kube/config # create user entry kubectl config set-credentials $USER_NICK \ # bearer token credentials, generated on kube master --token=$token \ # use either username|password or token, not both --username=$username \ --password=$password \ --client-certificate=/path/to/crt_file \ --client-key=/path/to/key_file \ --embed-certs=true \ --kubeconfig=/path/to/standalone/.kube/config # create context entry kubectl config set-context $CONTEXT_NAME \ --cluster=$CLUSTER_NICK \ --user=$USER_NICK \ --kubeconfig=/path/to/standalone/.kube/config 注: 生成独立的 kubeconfig 时,标识 --embed-certs 是必选的,这样才能远程访问主机上的集群。 --kubeconfig既是加载配置的首选文件,也是保存配置的文件。如果您是第一次运行上面命令,那么 --kubeconfig 文件的内容将会被忽略。 export KUBECONFIG=/path/to/standalone/.kube/config 上面提到的 ca_file,key_file 和 cert_file 都是集群创建时在 master 上产生的文件,可以在文件夹 /srv/kubernetes 下面找到。持有的 token 或者 基本认证也在 master 上产生。 如果您想了解更多关于 kubeconfig 的详细信息,运行帮助命令 kubectl config -h。

kubectx 阅读更多

kubectx可帮助您来回切换集群。 使用方法 kubectx是一个用于管理和切换kubectl上下文的实用程序。支持TAB补全。 USAGE: kubectx : list the contexts kubectx <NAME> : switch to context <NAME> kubectx - : switch to the previous context kubectx <NEW_NAME>=<NAME> : rename context <NAME> to <NEW_NAME> kubectx <NEW_NAME>=. : rename current-context to <NEW_NAME> kubectx -d <NAME> : delete context <NAME> ('.' for current-context) (this command won't delete the user/cluster entry that is used by the context) 切换命名空间 Kubens可以帮助您顺利地在Kubernetes命名空间之间切换。 使用方法 支持TAB补全。 USAGE: kubens : list the namespaces kubens <NAME> : change the active namespace kubens - : switch to the previous namespace 安装 由于kubectx / kubens是用Bash编写的,因此能够将它们安装到任何安装了Bash的POSIX环境中。 下载kubectx和kubens脚本 保存到PATH中或者保存到某个文件夹中然后从PATH中的某个位置(/usr/local/bin)创建符号连接到该文件夹 赋予可执行权限 安装补全脚本,如下所示: git clone https://github.com/ahmetb/kubectx.git ~/.kubectx COMPDIR=$(pkg-config --variable=completionsdir bash-completion) ln -sf ~/.kubectx/completion/kubens.bash $COMPDIR/kubens ln -sf ~/.kubectx/completion/kubectx.bash $COMPDIR/kubectx cat << FOE >> ~/.bashrc #kubectx and kubens export PATH=~/.kubectx:\$PATH FOE 例如执行如下操作 sudo git clone https://github.com/ahmetb/kubectx /opt/kubectx sudo ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx sudo ln -s /opt/kubectx/kubens /usr/local/bin/kubens 交互模式 如果希望kubectx和kubens命令提供带模糊搜索的交互式菜单,只需在PATH中安装fzf即可。 如果已经安装了fzf,但想要选择不使用此功能,请设置环境变量KUBECTX_IGNORE_FZF = 1。 定制颜色 如果想自定义指示当前命名空间或上下文的颜色,请设置环境变量KUBECTX_CURRENT_FGCOLOR和KUBECTX_CURRENT_BGCOLOR(请参阅此处的颜色代码): export KUBECTX_CURRENT_FGCOLOR=$(tput setaf 6) # blue text export KUBECTX_CURRENT_BGCOLOR=$(tput setaf 7) # white background 可以通过设置NO_COLOR环境变量来禁用输出中的颜色。

kvm 阅读更多

sudo apt update sudo apt install qemu qemu-kvm libvirt-bin bridge-utils virt-manager 将libvirtd添加自启动 sudo systemctl start libvirtd.service sudo systemctl enable libvirtd.service 网络模式 KVM安装完成后,首先需要进行网络设定,KVM支持四种网络模式: 桥接模式 NAT模式 用户网络模式 直接分配设备模式 桥接模式 在桥接模式下,宿主机和虚拟机共享同一个物理网络设备,虚拟机中的网卡和物理机中的网卡是平行关系,所以虚拟机可以直接接入外部网络,虚拟机和宿主机有平级的IP。 原本宿主机是通过网卡eth0连接外部网络的,网桥模式会新创建一个网桥br0,接管eth0来连接外部网络,然后将宿主机和虚拟机的网卡eth0都绑定到网桥上。 使用桥接模式需要进行以下操作: 编辑/etc/network/interfaces,增加如下内容: auto br0 iface br0 inet dhcp # 网桥使用DHCP模式,从DHCP服务器获取IP bridge_ports enp3s0 # 网卡名称,网桥创建前连接外部的网卡,可通过ifconfig命令查看,有IP地址的就是 bridge_stp on # 避免数据链路出现死循环 bridge_fd 0 # 将转发延迟设置为0 接下来需要重启networking服务(如果是通过SSH连接到宿主机上的,这一步会导致网络中断,如果出现问题可能导致连不上宿主机,最好在宿主机上直接操作) systemctl restart networking.service 使用ifconfig命令查看IP是否从enp3s0(网桥创建前的网卡)变到了br0上,如果没有变化则需要重启。如果宿主机ip已经成功变到网桥上,并且宿主机能正常上网而虚拟机获取不到ip,可能是ufw没有允许ip转发导致的,编辑/etc/default/ufw允许ip转发。 DEFAULT_FORWARD_POLICY="ACCEPT" 重启ufw服务让设置生效 systemctl restart ufw.service NAT(Network Address Translation)模式 NAT模式是KVM默认的网络模式,KVM会创建一个名为virbr0的虚拟网桥,但是宿主机和虚拟机对于网桥来说不是平等的了,网桥会把虚拟机藏在背后,虚拟机会被分配一个内网IP,而从外网访问不到虚拟机。 安装虚拟机 安装Linux虚拟机 sudo virt-install -n ubuntu_3 --description "ubuntu_3" --os-type=linux --os-variant=ubuntu17.10 --ram=1024 --vcpus=1 --disk path=/var/lib/libvirt/images/ubuntu_3.img,bus=virtio,size=50 # 磁盘位置,大小50G --network bridge:br0 # 这里网络选择了桥接模式 --accelerate --graphics vnc,listen=0.0.0.0,keymap=en-us # VNC监听端口,注意要选择en-us作为key-map,否则键位布局可能会乱 --cdrom /home/zzy/Downloads/ubuntu-18.04-live-server-amd64.iso # 安装ISO路径 安装Window虚拟机 安装Windows 10虚拟机会出现没有virtio驱动的问题,导致安装程序找不到硬盘,需要先下载virtio驱动。 https://fedoraproject.org/wiki/Windows_Virtio_Drivers 创建虚拟机时,将其加入到CD-ROM中 sudo virt-install -n win10 --description "win10" --os-type=win --os-variant=win10 --ram=4096 --vcpus=2 --disk path=/var/lib/libvirt/images/win_10.img,bus=virtio,size=100 --network bridge:br0 --accelerate --graphics vnc,listen=0.0.0.0,keymap=en-us --cdrom=/home/zzy/Downloads/virtio-win.iso --cdrom=/home/zzy/Downloads/cn_windows_10_consumer_editions_version_1803_updated_march_2018_x64_dvd_12063766.iso 执行以下命令查看虚拟机的列表 sudo virsh list 通过上一步查处的虚拟机列表,查看单台机器的VNC端口 sudo virsh vncdisplay ubuntu_3 # ubuntu_3是虚拟机名称 知道了VNC端口号,就可以使用VNC客户端连接到虚拟机完成安装了。

minikube 阅读更多

Minikube是一种可以轻松在本地运行Kubernetes的工具。 Minikube在笔记本电脑上的虚拟机(VM)内运行一个单节点Kubernetes集群,以供希望试用Kubernetes或每天进行开发的用户使用。 Minikube支持以下Kubernetes功能: DNS NodePorts ConfigMaps and Secrets Dashboards Container Runtime: Docker, CRI-O, and containerd Enabling CNI (Container Network Interface) Ingress 安装前检查 要检查Linux是否支持虚拟化,运行以下命令并验证输出是否为非空: egrep -q 'vmx|svm' /proc/cpuinfo && echo yes || echo no 安装kubectl 参考这里安装kubectl。 安装Hypervisor 安装Hypervisor,可选KVM或者VirtualBox。 Minikube还支持--vm-driver = none选项,该选项在主机而不是VM中运行Kubernetes组件。使用此驱动程序需要Docker和Linux环境,但不需要管理程序。 如果在Debian或衍生产品中使用none驱动程序,安装Docker使用.deb软件包,而不要使用对Minikube不起作用的snap软件包。可以从Docker下载.deb软件包。 警告:none驱动程序会导致安全和数据丢失问题。使用--vm-driver = none之前,请查阅本文档以获取更多信息。 安装minikube # 在github获取对应版本的release软件包 https://github.com/kubernetes/minikube/releases # 命令行下载 curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube sudo mv minikube /usr/local/bin # 使用install快速导入到PATH中 sudo mkdir -p /usr/local/bin/ sudo install minikube /usr/local/bin/ 确认安装 要确认虚拟机管理程序和Minikube均已成功安装,可以运行以下命令来启动本地Kubernetes集群: 注意:要使用minikube start来设置--vm-driver,请输入安装的虚拟机监控程序的名称,并使用小写字母,替换下面命令中的。 # 启动 minikube start --vm-driver = <driver_name> sudo minikube start --vm-driver=none # 将none设置为默认的驱动 sudo minikube config set vm-driver none # 增加内存分配,默认2G minikube config set memory 4096 # 输出 Starting local Kubernetes cluster... Running pre-create checks... Creating machine... Starting local Kubernetes cluster...、 # 检查 minikube status # 正常运行显示如下输出 host: Running kubelet: Running apiserver: Running kubeconfig: Configured # 停止 minikube stop # 清除本地集群 minikube delete # 国内使用镜像 minikube start --image-mirror-country='cn' --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' 目前支持的--vm-driver值的完整列表: virtualbox vmwarefusion kvm2 (driver installation) hyperkit (driver installation) hyperv (driver installation) Note that the IP below is dynamic and can change. It can be retrieved with minikube ip. vmware (driver installation) (VMware unified driver) none (Runs the Kubernetes components on the host and not in a virtual machine. You need to be running Linux and to have Docker installed.) 设置普通用户运行 sudo mv /home/sugoi/.kube /home/sugoi/.minikube $HOME sudo chown -R $USER $HOME/.kube $HOME/.minikube

Skaffold 阅读更多

安装 下载最新稳定版,并放在PATH中。 curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 chmod +x skaffold sudo mv skaffold /usr/local/bin 为了使Skaffold保持最新状态,会对Google服务器进行更新检查,以查看是否有新版本的Skaffold。默认情况下,此行为是启用的。作为副作用,该请求被记录。要禁用更新检查,有两个选择: 将SKAFFOLD_UPDATE_CHECK环境变量设置为false 使用以下命令在skaffold的全局配置中将其关闭skaffold config set -g update-check false Skaffold将使用minikube中托管的Docker守护程序构建应用程序。如果想针对其他Kubernetes集群进行部署,例如此类,GKE集群,将必须安装Docker才能构建此应用程序。 常用指令 skaffold init Skaffold需要skaffold.yaml,对于受支持的项目Skaffold可以生成一个简单的配置。在项目的根目录下运行skaffold init为应用程序配置Skaffold。 skaffold dev skaffold dev可以在应用程序上进行连续的本地开发。在开发模式下,Skaffold将监视应用程序的源文件,并在检测到更改时将重建镜像(或将文件同步到正在运行的容器中),推送任何新镜像并将应用程序重新部署到群集中。skaffold dev被认为是Skaffold的主要操作模式,因为它允许在迭代应用程序时连续地利用Skaffold的所有功能。 监视本地源代码,并在每次检测到更改时执行Skaffold管道。 skaffold.yaml提供了工作流程的规范,例如管道为: 使用Dockerfile从源代码构建Docker镜像 使用其内容的sha256哈希值标记Docker镜像 更新Kubernetes清单k8s-pod.yaml来运行上一步构建的镜像 使用kubectl apply -f部署Kubernetes清单 从已部署的应用流回日志 修改go文件源代码后,保存文件时,Skaffold将看到此更改,并重复skaffold.yaml中描述的工作流程,重新构建并重新部署应用程序。 Dev loop 运行skaffold dev时,Skafold首先将对skaffold.yaml中指定的所有模块进行完整构建和部署,类似于skaffold run。 成功构建和部署后,Skaffold将开始监视项目中指定的所有模块的所有源文件依赖性。在对这些源文件进行更改时,Skaffold将重建关联的模块,并将新更改重新部署到集群。 dev循环将一直运行,直到用户使用Ctrl + C取消Skaffold进程为止。收到此信号后,Skaffold将清除活动集群上所有已部署的模块,这意味着Skaffold将不会放弃在运行的整个生命周期中创建的任何Kubernetes资源。 可以选择使用--no-prune标志禁用此功能。 执行顺序 Skaffold在dev循环期间执行的操作有优先顺序,因此行为始终是可预测的。操作顺序为: 文件同步 构建 部署 文件监视程序和监视模式 Skaffold根据使用的构建器和模块的根目录来计算每个模块的依赖性。一旦计算出所有源文件依赖关系,在dev模式下,Skaffold将连续监视这些文件的后台更改,并在检测到更改时有条件地重新运行循环。 默认情况下,Skaffold使用fsnotify监视本地文件系统上的事件。 Skaffold支持: 轮询(polling)模式:在此模式下以可配置的间隔检查文件系统的更改 手动(manual)模式:在此模式下,Skaffold等待用户输入以检查文件更改 可以通过--trigger标志配置这些监视模式。 Control API 默认情况下,每次在本地更改文件时,dev循环将执行所有操作(根据需要),手动触发模式下操作除外。但是,可以通过Skaffold API的用户输入来关闭各个动作。 使用此API,即使被监视的文件在文件系统上已更改,用户也可以告诉Skaffold在执行任何这些操作之前等待用户输入。这样,用户可以在本地进行迭代时“排队”更改,然后仅在被要求时重新构建和重新部署Skaffold。 当构建的发生频率超出预期时,构建或部署需要很长时间或成本很高时,或者用户希望将其他工具与skaffold dev集成时,这将非常有用。 skaffold run 如果希望只构建和部署一次,那么运行skaffold run。 Skaffold将只执行一次skaffold.yaml中描述的工作流程。

virtualBox 阅读更多

安装 将以下行添加到您的/etc/apt/sources.list中,将<mydist>替换为对应的发行版代号,18.04为bionic echo "deb [arch=amd64] https://download.virtualbox.org/virtualbox/debian bionic contrib" >> /etc/apt/sources.list wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add - wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add - sudo apt-get update sudo apt-get install virtualbox 遇到以下签名无效时该怎么办:BADSIG ...从存储库刷新软件包时? sudo -s -H apt-get clean rm /var/lib/apt/lists/* rm /var/lib/apt/lists/partial/* apt-get clean apt-get update