Kubernetes是一个基于Google Borg的开源容器管理系统。它可以配置为提供高度可用的,水平自动缩放的自动部署。本指南介绍如何在Linode上设置Kubernetes集群并管理NGINX服务的生命周期。
你会需要:
本指南中的步骤创建一个双节点群集。评估您自己的资源需求,并根据您的需求启动适当大小的群集。
Linodes默认启用交换内存。kubelet不支持交换内存,如果交换处于活动状态或甚至存在于您的/etc/fstab
文件中,则无法使用。
/etc/fstab
应该是这个样子:
/ etc / fstab
1 2 3 4 5 6 7 8 9 10 | # /etc/fstab: static file system information. # # use 'blkid' to print the universally unique identifier for a # device; this may be used with uuid= as a more robust way to name devices # that works even if disks are added and removed. see fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda1 during installation /dev/sda / ext4 noatime,errors=remount-ro 0 1 /dev/sdb none swap sw 0 0 |
---|
/dev/sdb
。要使本指南中的命令更易于理解,请在每台计算机上设置主机名和托管文件。
/etc/hostname
并添加:
/etc/hostname
kube-master/etc/hosts
:
/ etc / hosts<kube-master-private-ip> kube-master
<kube-worker-private-ip> kube-worker-1
如果您有两个以上的节点,也可以添加其私有IP /etc/hosts
。
为了便于以后理解输出和调试问题,根据其作用(考虑命名每个主机名kube-worker-1
,kube-worker-2
等等)。
重新启动节点后,请登录每个节点以确认更改。
检查:
$ hostname
在终端输出预期的主机名。cat /proc/swaps
。如果您无法通过其主机名或私有IP ping任何主机:
ifconfig
。您应该看到一个条目eth0:1
列出您的私有IP。如果eth0:1
未列出,则可能在将私有IP添加到基础主机之前部署了Linode映像。重新创建图像并返回到指南的开头。Debian / Ubuntu:
apt install ebtables ethtool
CentOS的/ RHEL:
yum install ebtables ethtool
这些步骤使用官方Ubuntu存储库安装Docker Community Edition(CE)。要在其他发行版上安装,请参阅官方安装页面。
stable
Docker存储库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"docker
组:
sudo usermod -aG docker exampleuser
您需要重新启动shell会话才能使此更改生效。Debian / Ubuntu:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
CentOS的/ RHEL:
cat <<eof > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
eof
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
kubectl
工具:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/configkubectl get nodes
。输出将类似于:
root@kube-master:~# kubectl get nodes name status roles age version kube-master NotReady master 1m v1.8.1
列出主节点是NotReady
因为群集没有容器网络接口(CNI)。CNI是基于容器的网络接口的规范。在本指南中,我们将使用Calico。或者,您可以使用法兰绒或其他CNI获得类似的结果。
“ 配置Kubernetes主节点”部分中--pod-network-cidr
使用的参数定义了CNI的网络范围。kubectl get pods --all-namespaces
以查看在kube-system
命名空间中创建的pod :
root@kube-master:~# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-etcd-nmx26 1/1 Running 0 48s
kube-system calico-kube-controllers-6ff88bf6d4-p25cw 1/1 Running 0 47s
kube-system calico-node-bldzb 1/2 CrashLoopBackOff 2 48s
kube-system calico-node-k5c9m 2/2 Running 0 48s
kube-system etcd-master 1/1 Running 0 3m
kube-system kube-apiserver-master 1/1 Running 0 3m
kube-system kube-controller-manager-master 1/1 Running 0 3m
kube-system kube-dns-545bc4bfd4-g8xtm 3/3 Running 0 4m
kube-system kube-proxy-sw562 1/1 Running 0 4m
kube-system kube-proxy-x6psn 1/1 Running 0 1m
kube-system kube-scheduler-master 1/1 Running 0 3m
此命令使用该-n
标志。该-n
标志是一个全局kubectl标志,用于选择非默认名称空间。我们可以通过运行来查看现有的名称空间kubectl get namespaces
:
root@kube-master:~# kubectl get namespaces
NAME STATUS AGE
default Active 4h
kube-public Active 4h
kube-system Active 4h
kubectl get nodes
再次运行以查看主节点现在正在正常运行:
root@kube-master:~# kubectl get nodes
name status roles age version
kube-master Ready master 12m v1.8.1kubeadm join
使用kube-master
主机名运行以添加第一个worker:
kubeadm join --token <some-token> kube-master:6443 --discovery-token-ca-cert-hash sha256:<some-sha256-hash>kubectl
查看从节点现在是否已就绪:
root@kube-master:~# kubectl get nodes name status roles age version kube-master ready master 37m v1.8.1 kube-worker-1 ready 2m v1.8.1甲部署是逻辑参照荚或豆荚和它们的配置。
kubectl create
进行nginx部署:
kubectl create deployment nginx --image=nginxnginx
。kubectl get deployments
列出所有可用部署:
kubectl get deploymentskubectl describe deployment nginx
可查看详细信息:
Name: nginx
Namespace: default
CreationTimestamp: Sun, 15 Oct 2017 06:10:50 +0000
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision=1
Selector: app=nginx
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 1 max unavailable, 1 max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: nginx
Port:
Environment:
Mounts:
Volumes:
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
OldReplicaSets:
NewReplicaSet: nginx-68fcbc9696 (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 1m deployment-controller Scaled up replica set nginx-68fcbc9696 to 1
该describe
命令允许您在更深层次上查询不同的kubernetes资源,例如pod,部署和服务。上面的输出表明nginx
在默认命名空间内调用了部署。此部署只有一个复制,并且正在运行docker镜像nginx
。端口,底座,体积和环境变量都未设置。32000
+范围内为主机上的端口分配此服务。
尝试get
当前的服务:
root@kube-master:~# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5h nginx NodePort 10.98.24.29 <none> 80:32555/TCP 52scurl
在从属节点上使用来验证NGINX部署是否成功:
root@kube-master:~# curl kube-worker-1:32555
输出将显示未呈现的“欢迎使用nginx!”页面HTML。kubectl delete deployment
:
root@kube-master:~# kubectl delete deployment nginx deployment "nginx" deleted root@kube-master:~# kubectl get deployments No resources found.有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。
更多教程请前往腾讯云+社区学习更多知识。
参考文献:《How to Install, Configure, and Deploy NGINX on a Kubernetes Cluster》