基本的に、私は自動的にスケーリングする3つのコンテナーを作成するDeploymentがあります。PHP-FPM、NGINX、およびアプリケーションを含むコンテナーで、すべてシークレット、サービス、Ingressで設定されています。アプリケーションはまた、PHP-FPMとNGINXの間でプロジェクトを共有するため、すべてセットアップされています。
K8でさらに探索したいので、永続ディスクもマウントするRedisでポッドを作成することにしました(ただし、それは重要ではありません)。また、redis用のサービスを作成しました。RedisコンテナーにSSHで接続してredis-cli
を実行すると、すべて正常に動作します。
楽しい部分は、プロジェクトがRedisがオンになっているポッドに接続できないことです。ポッド間のコンテナは同じ「ローカル」ネットワークを共有し、localhost
を使用してアクセスできることを理解しています。
独立してスケーリングする他のポッドで実行されているredisサーバーにプロジェクトを接続するにはどうすればよいですか? Redisサービスの何が問題になっていますか?
私のRedisサービスは次のとおりです。
apiVersion: v1
kind: Service
metadata:
name: redis-service
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
私のRedisポッドは、デプロイメント構成ファイルを使用しています(必ずしもスケーリングする必要はありませんが、楽しみにしています):
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
labels:
app: redis
spec:
selector:
matchLabels:
app: redis
strategy:
type: Recreate
template:
metadata:
labels:
app: redis
spec:
volumes:
- name: redis-persistent-volume
persistentVolumeClaim:
claimName: redis-pvc
containers:
- image: redis:4.0.11
command: ['redis-server']
name: redis
imagePullPolicy: Always
resources:
limits:
cpu: 250m
memory: 512Mi
requests:
cpu: 250m
memory: 512Mi
ports:
- containerPort: 6379
name: redis
volumeMounts:
- name: redis-persistent-volume
mountPath: /data
また、kubectl get service
を利用すると、RedisサーバーにクラスターIPがあります。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 21h
nginx-service NodePort 10.100.111.16 <none> 80:30312/TCP 21h
redis-service ClusterIP 10.99.80.141 <none> 6379/TCP 6s
MicroK8s を使用している場合は、それらの documentation を参照してください
私は別のポッドと通信するのに苦労しましたが、期待どおりに機能しない他のことは、サービスの名前を使用して通信することでした(DNSルックアップはサービス名をIPに変換できないようです)。
いずれにせよ、 MicroK8sのドキュメント の中にいくつかの関連する手順があり、実行する必要があり、その後すべてが突然動作し始めました。
また、MicroK8s DNSサービスが実際にインストールされていることを確認してください。
microk8s.enable dns
最新版は MicroK8sのドキュメント を参照してください。ただし、今日のステップは次のとおりです。